2024年3月14日 星期四

電腦圖學 Week04 🥴

茶壺滑鼠縮放:week04_mouse_glScalef

1. moodle下載 freeglut 拖到桌面

2. 把桌面\freglut\lib\libfreeglut.a 複製成 libglut32.a

3. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week04_mouse_glScalef

4. GLUT要選桌面的 freeglut

5. 打第一週的10行程式

6. 再加兩行程式碼, 把背景變鵝黃色
glClearColor(1.0,1.0,0.9,1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


6. 貼上一些上周的程式碼, 讓茶壺可以旋轉(week03_mouse_glRotatef)
float angle = 0;
glPushMatrix();
        glRotatef(angle, 0, 0, 1);
        glutSolidTeapot( 0.3 );
glPopMatrix();
void motion(int x, int y)
{
    angle = x;
    display();
}
glutMotionFunc(motion);

6. 再修改三行程式碼, 讓茶壺可以放大縮小
float s = 1;
glScalef(s, s, s);
s = 1 + (x-150)/150.0;

鍵盤旋轉縮放:week04_keyboard_mouse_motion

1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week04_keyboard_mouse_motion

2. GLUT要選桌面的 freeglut

3. 複製第一週的10行程式

4. 再加4行程式碼, 讓視窗顯示鍵盤上按的按鍵(滑鼠要在茶壺視窗上)
#include <stdio.h>
void keyboard(unsigned char key,int x,int y){
    printf("key:%c  x:%d  y:%d\n",key,x,y);
}
glutKeyboardFunc(keyboard);

5. 再加4行程式碼, 讓視窗顯示鍵盤上按的按鍵(滑鼠要在茶壺視窗上)
float angle = 0, oldX = 0;
glPushMatrix();
    glRotatef(angle, 0, 0, 1);
    glutSolidTeapot( 0.3 );
glPopMatrix();
void mouse(int button,int state,int x,int y){
    oldX = x;
}
void motion(int x, int y){
    angle += (x-oldX);
    oldX = x;
    display();
}

觀察課本範例Translate & Rotate

1. 下載課本的範例 https://jsyeh.org/3dcg10 windows.zip(win32) 及 data.zip(data)

2. windows.zip 先解壓縮, data.zip 直接點開拉到windows資料夾

3. 執行 Transformation.exe

4. 先把 translate 移到右方,再rotate看看

5.在下方程式按右鍵,可以交換translate&rotate


6. translate是公轉 rotate是自轉

7. 理解的技巧: 
    (1)把左耳 "靠著" 左肩看程式碼(從下往上看)
    (2)把 "旋轉中,高瘦的藍色的車子" 移到右邊去

自轉:week04_translate_rotate_scale

1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week04_translate_rotate_scale

2. 複製上一個程式碼, 再刪掉幾行

3. 加上幾行程式碼, 讓茶壺自己旋轉
glRotatef(angle++, 0, 0, 1);
glutIdleFunc(display); ///有空就重畫畫面

4. 加上幾行程式碼, 把茶壺縮小換顏色放到右邊自己旋轉

glClearColor(1.0, 1.0, 0.9, 1.0); ///背景
glTranslatef(0.8, 0, 0); ///放到右邊
glRotatef(angle++, 0, 0, 1); ///旋轉中的
glScalef(0.3, 0.3, 0.3); ///小小的
glColor3f(0, 1, 0); ///綠色
glutSolidTeapot( 0.3 ); ///茶壺

公轉:week04_rotate_translate_scale

1. CodeBlocks開GLUT專案, 目錄選桌面, 專案名取week04_translate_rotate_scale

2. 複製上一個程式碼

3. 交換2行程式碼的順序
glRotatef(angle++, 0, 0, 1); ///旋轉中的
glTranslatef(0.8, 0, 0); ///放到右邊

沒有留言:

張貼留言