week04 -20220315
小葉老師上課要點:
1. 主題: 旋轉 Rotate jsyeh.org/3dcg102. 主題: 旋轉軸、旋轉角度
3. 實作: glRotatef(angle, x,y,z);
4. 主題: mouse motion 動
5. mouse motion 配合旋轉
6. (大象放進冰箱)
(可能教太快,重講 mouse 寫程式、GL_LINE_LOOP)
旋轉 Rotate
1. 進入小葉老師的網址 https://jsyeh.org/3dcg10
下載三個檔案 data. zip , windows zip ,glut32.d11
2. windows.zip 解壓縮 > 下載 \ windows \ Shapes .exe
data.zip 解壓縮>下載 \ windows \ data \ 模型
glut32.d11 解壓縮 > 下載 \ windows \ glut32.d11
3.執行 > 下載 \ window \ Transformation.exe 看範例
拖曳下方綠色數值(glRotatef)可以旋轉車子
點選上方右鍵選取Al Capone(人物)
4.紫色框起來是旋轉軸,旋轉軸的前一個數字是選轉角度。
根據安培右手定理,比讚的四隻手指頭方向決定選轉方向
(0,1,0 固定y軸 讚向上 旋轉軸方向向上)
(1,0,0 固定x軸 讚向右 往前轉)
(0,0,1 固定z軸 讚向自己胸前 往左邊轉)
*右手座標: 拇指x座標、食指y座標、中指z座標
實作 Rotate 的 GLUT 程式
2.先從上周的筆記(備份/還原茶壺)複製精簡的10行程式碼 可以使用滑鼠拖曳茶壺使轉動了!
新增第25行: glutMotionFunc(motion); ///mouse motion動
新增第14行:motion的函式,給一個angle使可以修改的數值
修改第9行:把原本固定的90度改成可以修改的angle
新增第4行:宣告angle
但是有瑕疵: 按下滑鼠拖曳放開後,再按下滑鼠又重回上方的位置
原因: 第16行程式碼 angle = x;
* 如何改良: 冰箱門打開 、 大型放進去、 冰箱關起來原因: 第16行程式碼 angle = x;
滑鼠按下去 、 滑鼠拖曳 、 滑鼠放開來
新增第20行: 定義mouse函式,紀錄舊的位置(定錨)
更新第3行: 宣告oldX=0;
這樣就可以成功進行持續且順利的旋轉茶壺了!!
重新複習滑鼠寫程式
1.建立新的GLUT專案:week04_review_mouse_draw
2.第12行:printf("%d %d %d %d\n", button, state, x, y);
button : 0代表按下左鍵、1代表按下中鍵、2代表按下右鍵
3.改寫第12行: printf(" glVertex2f( (%d-150)/150.0, (%d-150/150.0);\n" ,x,y);
可以印出滑鼠按下去位置的座標和放開滑鼠位置的座標






沒有留言:
張貼留言