2017年3月13日 星期一

Week03 閻覃的上課筆記

Week03 閻覃的上課筆記.md

Week03 閻覃的上課筆記

冷笑話

要把大象放冰箱,總共分幾步?

  1. 把冰箱門打開
  2. 把大象放進去
  3. 把冰箱門關起來

滑鼠拖動分幾步?

  1. 把滑鼠按下
  2. 拖動滑鼠
  3. 把滑鼠鬆開

滑鼠按鍵

函式定義

 
1
1
extern void glutMouseFunc(void (*func)(int button, int state, int x, int y));

在main函式中呼叫這個函式,完成滑鼠函式的初始化。

 
12
1
void mouse(int button, int state, int x, int y) {
2
    printf("%d %d %d %d \n", button, state, x, y);
3
}
4
5
int 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函式的參數值

00DEEC5F-1E71-4233-8272-B4AC0B951C74

變顏色

重要函式定義

 
1
1
extern void glutPostRedisplay(void);

這個函式可以讓glut重新呼叫display函式。

 
5
1
void 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函式,這樣並不優雅。

5E718209-F5DD-4819-8526-544792528FB8

現在,點擊不同位置后,茶壺的顏色都會發生變化。

滑鼠拖曳

重要函式定義

 
4
1
//設定motion函式
2
extern void glutMotionFunc(void (*func)(int x, int y));
3
//設定視窗大小
4
extern void glutInitWindowSize(int width, int height);

將mouse中的code大搬家

 
4
1
void motion(int x, int y){
2
    glColor3d(1, x / 500.0, y / 500.0);
3
    glutPostRedisplay();
4
}

現在可以拖曳滑鼠完成顏色的改變了

畫圓

 
12
1
#include <cmath>
2
//引入cmath頭文件,使用三角函數
3
static const double PI = 3.1415926;
4
//定義PI常數
5
static 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
}

A14E8D25-0D82-47AE-B37F-05F31AE8029B

改動頂點的係數就可以畫橢圓了

 
8
1
static 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
}

5BC4CCF9-9668-470A-8D57-EA14DC6767ED

沒有留言:

張貼留言