2021年3月29日 星期一

week06-明天跑800

 GL應用


TRT:

glTranslatef(0.25,0,0);///中心

glRotatef(angle,0,0,1);///旋轉

glTranslatef(0.25,0,0);///中心


#今日教學

#include <GL/glut.h>///(0)使用GLUT外掛

float vx[2000],vy[2000];///準備一堆頂點,等一下要畫

#include <stdio.h>

int N=0; ///有N個頂點

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清

    glPushMatrix();///備份矩陣

        glRotatef(angle,0,0,1);///旋轉

        glScalef(0.5,0.1,0.1);///調成細長

        glColor3f(0.3,0.3,1.0);///藍色

        glutSolidCube(1);///方塊

    glPopMatrix();

    glutSwapBuffers();///交換兩倍的Buffers

}

void motion(int x,int y)

{

    angle++;

    display();

}

int main(int argc, char**argv)///???以前是int main()

{

    glutInit(&argc,argv);///(1)GLUT初始設定

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式

    glutCreateWindow("08160816旋轉跳躍");///(3)開窗

    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    //glutMouseFunc(mouse);///TODO:(1)mouse滑鼠的程式

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式

    glutMainLoop();///(5)主要迴圈

}


自己旋轉:

1.在中心移動


2.手臂轉
#include <GL/glut.h>///(0)使用GLUT外掛
float vx[2000],vy[2000];///準備一堆頂點,等一下要畫
#include <stdio.h>
int N=0; ///有N個頂點
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空

    glPushMatrix();///備份矩陣
        glRotatef(angle++,0,0,1);///旋轉
        glScalef(0.5,0.1,0.1);///調成細長
        //glColor3f(0.3,0.3,1.0);///藍色

        glTranslatef(-0.25,0,0);
        glutSolidCube(1);///方塊
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的Buffers
}
void motion(int x,int y)
{
    angle++;
    display();
}

int main(int argc, char**argv)///???以前是int main()
{
    glutInit(&argc,argv);///(1)GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
    glutCreateWindow("08160816旋轉跳躍");///(3)開窗
    glutIdleFunc(display);///idle很閒的時候,一直做
    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式
    glutMainLoop();///(5)主要迴圈
}

3.手臂與手肘轉動
#include <GL/glut.h>///(0)使用GLUT外掛
float vx[2000],vy[2000];///準備一堆頂點,等一下要畫
#include <stdio.h>
int N=0; ///有N個頂點
float angle=0;
void hand()
{
    glPushMatrix();///備份矩陣
        glScalef(0.5,0.1,0.1);///調成細長
        glutSolidCube(1);///方塊
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
    glPushMatrix();///備份矩陣
        glTranslatef(-0.25,0,0);
        glRotatef(angle,0,0,1);///旋轉
        glTranslatef(-0.25,0,0);
        hand();
        glPushMatrix();///備份矩陣
            glTranslatef(-0.25,0,0);
            glRotatef(angle,0,0,1);///旋轉
            glTranslatef(-0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();
    glutSwapBuffers();///交換兩倍的Buffers
    angle++;
}
void motion(int x,int y)
{
    angle++;
    display();
}

int main(int argc, char**argv)///???以前是int main()
{
    glutInit(&argc,argv);///(1)GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
    glutCreateWindow("08160816旋轉跳躍");///(3)開窗
    glutIdleFunc(display);///idle很閒的時候,一直做
    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式
    glutMainLoop();///(5)主要迴圈
}

4.雙臂轉轉




#include <GL/glut.h>///(0)使用GLUT外掛
float vx[2000],vy[2000];///準備一堆頂點,等一下要畫
#include <stdio.h>
int N=0; ///有N個頂點
float angle=0;
void hand()
{
    glPushMatrix();///備份矩陣
        glScalef(0.5,0.1,0.1);///調成細長
        glutSolidCube(1);///方塊
    glPopMatrix();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );///清空
    glPushMatrix();///備份矩陣
        glTranslatef(-0.25,0,0);
        glRotatef(angle,0,0,1);///旋轉
        glTranslatef(-0.25,0,0);
        hand();///手臂
        glPushMatrix();///備份矩陣
            glTranslatef(-0.25,0,0);
            glRotatef(angle,0,0,1);///旋轉
            glTranslatef(-0.25,0,0);
            hand();///手肘
        glPopMatrix();
    glPopMatrix();

    glPushMatrix();///備份矩陣
        glTranslatef(0.25,0,0);
        glRotatef(-angle,0,0,1);///旋轉
        glTranslatef(0.25,0,0);
        hand();
        glPushMatrix();///備份矩陣
            glTranslatef(+0.25,0,0);
            glRotatef(-angle,0,0,1);///旋轉
            glTranslatef(+0.25,0,0);
            hand();
        glPopMatrix();
    glPopMatrix();

    glutSwapBuffers();///交換兩倍的Buffers
    angle++;
}
void motion(int x,int y)
{
    angle++;
    display();
}

int main(int argc, char**argv)///???以前是int main()
{
    glutInit(&argc,argv);///(1)GLUT初始設定
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);///(2)顯示模式
    glutCreateWindow("08160816旋轉跳躍");///(3)開窗
    glutIdleFunc(display);///idle很閒的時候,一直做
    glutDisplayFunc(display);///(4)等一下要顯示的函式(display顯示函式)

    glutMotionFunc(motion);///TODO:(1)mouse滑鼠的程式
    glutMainLoop();///(5)主要迴圈
}




**********************************************************************
光線程式

const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

/////////////////////
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };




沒有留言:

張貼留言

Week18期末作業(橘貓的跳舞熊熊)

 期末作業(橘貓的跳舞熊熊) 影片: https://youtu.be/R89tptMaQZw 程式碼: #include <opencv/highgui.h> #include <opencv/cv.h> #include <GL/glut.h...