Week03 閻覃的上課筆記
冷笑話
要把大象放冰箱,總共分幾步?
- 把冰箱門打開
- 把大象放進去
- 把冰箱門關起來
滑鼠拖動分幾步?
- 把滑鼠按下
- 拖動滑鼠
- 把滑鼠鬆開
滑鼠按鍵
函式定義
11extern void glutMouseFunc(void (*func)(int button, int state, int x, int y));在main函式中呼叫這個函式,完成滑鼠函式的初始化。
121void mouse(int button, int state, int x, int y) {2 printf("%d %d %d %d \n", button, state, x, y);3}45int main(int argc, char *argv[]) {6 glutInit(&argc, argv);7 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);8 glutCreateWindow("打得不錯");9 glutDisplayFunc(display);10 glutMouseFunc(mouse);11 glutMainLoop();12}運行后,點擊滑鼠,可以看到console中有列印出mouse函式的參數值

變顏色
重要函式定義
11extern void glutPostRedisplay(void);這個函式可以讓glut重新呼叫display函式。
51void mouse(int button, int state, int x, int y) {2 printf("%d %d %d %d \n", button, state, x, y);3 glColor3d(1, x / 300.0, y / 300.0);4 glutPostRedisplay();5}因為窗體大小默認是300,為了傳遞小於1的小數,所以除以300即可。
不要調用display函式,這樣並不優雅。

現在,點擊不同位置后,茶壺的顏色都會發生變化。
滑鼠拖曳
重要函式定義
41//設定motion函式2extern void glutMotionFunc(void (*func)(int x, int y));3//設定視窗大小4extern void glutInitWindowSize(int width, int height);將mouse中的code大搬家
41void motion(int x, int y){2 glColor3d(1, x / 500.0, y / 500.0);3 glutPostRedisplay();4}現在可以拖曳滑鼠完成顏色的改變了
畫圓
1212//引入cmath頭文件,使用三角函數3static const double PI = 3.1415926;4//定義PI常數5static void display(void) {6 glBegin(GL_POLYGON);7 for (float alpha = 0; alpha < 2 * PI; alpha += 0.01) {8 glVertex2f(0.5f*cosf(alpha),0.5f*sinf(alpha));9 }10 glEnd();11 glutSwapBuffers();//交換雙緩存區12}
改動頂點的係數就可以畫橢圓了
81static void display(void) {2 glBegin(GL_POLYGON);3 for (float alpha = 0; alpha < 2 * PI; alpha += 0.01) {4 glVertex2f(0.6f*cosf(alpha),0.4f*sinf(alpha));5 }6 glEnd();7 glutSwapBuffers();//交換雙緩存區8}
沒有留言:
張貼留言