2022年3月22日 星期二

ʕ •ᴥ•ʔ week05

week05 -20220322
小葉老師上課要點:
1. 主題: 移動、旋轉、縮放、矩陣
2. 主題: 鍵盤函式 glutKeyboardFunc()
3. 複習: 鍵盤+滑鼠操作, 模仿 Maya/Unity介面
4. 主題: 電腦圖學之父 Ivan Sutherland (Sketchpad)


電腦圖學之父 Ivan Sutherland (Sketchpad)

伊凡·愛德華·蘇澤蘭 Ivan Edward Sutherland
生於美國內布拉斯加州黑斯廷斯,計算機科學家,被認為是「計算機圖形學之父」。因發明Sketchpad,拓展了計算機圖形學的領域,為1988年圖靈獎得主。

實作GLUT程式碼 - keyboard 函式

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.裝好 freeglut 資料夾到桌面,改lib\libglut32.a
   並開啟 codeblocks 建立新的 GLUT 專案: week05_keyboard

5.先打上基礎10行程式碼


6.用黃色小茶壺做一些神奇的事情
   *增加第21行: keyboard 函式
     增加第10行: 寫 keyboard 函式要做的事
     增加第3行 display 函式裡的印出之前的黃色小茶壺
     增加第2行: 因為第12行要用printf,所以要加標頭檔#include <stdio.h>
     
  當滑鼠停在茶壺小視窗中任一地方,並按下鍵盤中英文字母,小黑視窗會印出你按下了什麼
  英文字母和滑鼠所在的座標。

7.什麼是 Callback ?
   程式碼第20、21行就是 Callback 函式。在main函式外面寫了函式,當main函式迴圈在執
   行時,跑到需要使用函式就會去叫用註冊對應的 Callback 函式名字。
   第10行: keyboard函式內的參數細說
               char 代表字母: -128..+127
               unsigned char :0...255 只有正的
               singed 正負號、unsigned 沒有正負號



實作GLUT程式碼 - keyboard函式 + mouse函式 + motion函式

*要做移動 + 旋轉 + 放大縮小

1. 建立新的 GLUT 專案: week05_keyboard_mouse_motion
    接續剛剛的week05_keyboard 變成 keyboard函式 + mouse函式 + motion函式
     先寫出三個函式


2. 先試試看移動,要做備分還原矩陣,才不會每執行一次就跑走。
    增加9-13行: 備份、還原矩陣、學模型一樣建立移動的三個參數glTranslate(x,y,z)
    增加第3行: 給x,y,z初始值 
    修改第15、18、21的 x,y 改 mouseX, mouseY 避免和 glTranslate的 x,y 衝突
    增加第23行: motion函式裡,加上只要有移動就重畫畫面的 display(),還有讓茶壺移動      的程式
    再回去修改第10行 glTranslate 內的參數去正確的換算

    這樣就可以按下滑鼠拉動茶壺了。



3. 但是每點一次滑鼠都從點下去的地方拉動,要在原本停的地方繼續移動啦
    修改第21行: 為了瞬間移動的這個問題
    修改第4行: x=150,y=150,讓執行程式後茶壺一開始就顯示在視窗中央,而不是0,0的左
    上角
    新增第8行: 新增背景顏色 glClearColor()函式內有四個參數分別是 R,G,B,透明度



4. 接著做放大縮小,所以繼續修改程式碼
    增加第12行: 學模型加入 glScalef 使可以縮放
    修改第4行 : 宣告scale倍率
    增加第27行: y方向正向移動 scale放大,負向移動 scale縮小

   

沒有留言:

張貼留言

VERY BEAUTIFUL, VERY POWERFUL

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