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,透明度
增加第12行: 學模型加入 glScalef 使可以縮放
修改第4行 : 宣告scale倍率
增加第27行: y方向正向移動 scale放大,負向移動 scale縮小




沒有留言:
張貼留言