2022年3月15日 星期二

ʕ •ᴥ•ʔ week04

 

week04 -20220315
小葉老師上課要點:
1. 主題: 旋轉 Rotate jsyeh.org/3dcg10
2. 主題: 旋轉軸、旋轉角度
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座標
圖:https://medium.com/@maximilianhuang/2018-02-08-acc64d5d5982


實作 Rotate 的 GLUT 程式

1.建立新的 GLUT 專案,檔名為: week03_translate 
2.先從上周的筆記(備份/還原茶壺)複製精簡的10行程式碼
   改寫單純在那邊的旋轉90度茶壺

實作 Rotate 加上 motion 的 GLUT 程式


   可以使用滑鼠拖曳茶壺使轉動了!
   新增第25行: glutMotionFunc(motion); ///mouse motion動
   新增第14行:motion的函式,給一個angle使可以修改的數值
   修改第9行:把原本固定的90度改成可以修改的angle
   新增第4行:宣告angle
    
   但是有瑕疵: 按下滑鼠拖曳放開後,再按下滑鼠又重回上方的位置
   原因: 第16行程式碼 angle = x; 
           x 為x座標(1,0,0)



實作 Rotate 加上 motion 再加上 mouse 繼續改良 GLUT 程式


* 如何改良: 冰箱門打開大型放進去冰箱關起來

                 滑鼠按下去 滑鼠拖曳   、 滑鼠放開來 


新增第32行: glutMouseFunc(mouse); ///上週教: mouse按下去、放開來
新增第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);
                    可以印出滑鼠按下去位置的座標和放開滑鼠位置的座標



4.增加第12行: 修改程式碼為印出按下去的滑鼠位置座標就好
   * 問題: 黑壓壓的點根本看不出畫了什麼




5. * 問題: 黑壓壓的點根本看不出畫了什麼,所以從x,y去做修改看看
       
       增加第4-5行 : mx,my用來記錄點的位置
       增加第9-13行: 把點們用LINE_LOOP和神奇for迴圈連起來
       增加第18-23行: 讓小黑顯示座標


沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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