2022年3月15日 星期二

爆肝Week04

旋轉Rotatef()

1.修改之前的茶壺程式碼

```

#include <GL/glut.h>

void display()

{

    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份矩陣

        glRotatef(90, 0, 0, 1);

        glColor3f(1, 1, 0);

        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣

    /*備份與還原間要縮排*/

    glutSwapBuffers();

}


int main(int argc, char** argv)

{

    glutInit( &argc, argv);

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow("week_02");


    glutDisplayFunc(display);

    glutMainLoop();

}

```


利用滑鼠事件glutMotionFunc()旋轉

```

#include <GL/glut.h>

float angle=0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份矩陣

        glRotatef(angle, 0, 0, 1);

        glColor3f(1, 1, 0);

        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣

    /*備份與還原間要縮排*/

    glutSwapBuffers();

}

void Motion(int x, int y)

{

    angle=x;

    display();

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv);

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow("week_04");


    glutDisplayFunc(display);ouse

    glutMotionFunc(Motion);

    glutMainLoop();

}

```

    只使用Motion函式會在每次旋轉時重製角度
可以利用Mousec函式在每一次拖曳結束後固定角度
```

#include <GL/glut.h>

float angle=0, oldX =0;

void display()

{

    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

    glPushMatrix();///備份矩陣

        glRotatef(angle, 0, 0, 1);

        glColor3f(1, 1, 0);

        glutSolidTeapot(0.3);

    glPopMatrix();///還原矩陣

    /*備份與還原間要縮排*/

    glutSwapBuffers();

}

void Motion(int x, int y)

{

    angle +=(x-oldX);

    oldX =x;

    display();///重製畫面

}

void MouseClick(int button, int state, int x, int y)

{

    oldX=x;///定錨

}

int main(int argc, char** argv)

{

    glutInit( &argc, argv);

    glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH );

    glutCreateWindow("week_04");


    glutDisplayFunc(display);

    glutMotionFunc(Motion);

    glutMouseFunc(MouseClick);

    glutMainLoop();

}

```

***glutMouseFunc()與glutMotionFunc()的差別***

--glutMouseFunc()適用於滑鼠點擊,按下與放開個為不同事件
--glutMotionFunc()適用於滑鼠拖曳

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

一.     一樣先安裝且設定好freeglut,OpecCV, 開啟CodeBlocks建立新專案 week11_gundam,                 把 MyGundam.zip下載解壓縮後的data資料夾放到freeglut/bin裡面 把week09_openc...