2023年3月8日 星期三

JIA的電腦圖學日誌 Week04

 1

今天的第一個程式, 和上週一樣到老師的網站 https://jsyeh.org/3dcg10/ 下載檔案

data     win32    


下載完畢後解壓縮

下載 > windows > data ( data 要解壓縮到 windows 裡哦, 裡面有很多的模型 )

下載 > windows >Transformation.exe

點開 Transformation.exe


我們繼續了解一下,上週知道了如何移動,這週來玩玩看旋轉


glRotatef 控制旋轉,目前亮紅的是旋轉角度,後面三個分別是以 x y z 軸為旋轉軸


以 x軸為旋轉軸,轉起來像鞠躬的樣子 (當角度是正的,車子往下轉,反之)


以 y軸為旋轉軸,轉起來像搖頭的樣子 (當角度是正的,車子往右轉,反之)


當以 z軸為旋轉軸,就要思考一下當角度為正時如何選轉

想像一下安培右手定則,把右手比出來轉看看

所以旋轉30度就像下圖的樣子


接著我們換個比較有感覺的模型來試試

我們現在的旋轉軸如下,當旋轉角度為正時,人物會向右下轉動,就好像在用肩膀撞我的樣子


我們使用和每週一樣的方法新增 GLUT 專案

我們想讓茶壺旋轉起來,第一步先複製上週的程式碼

angle 宣告成0 , 每次 display 時 angle++ , 為什麼會 display 呢?

glutIdleFunc(display); 閒閒沒事時就呼叫 display 函式

glRotatef(angle, 0, 1, 0); 旋轉 angle 角度

我們的程式碼


執行小黑, 看到旋轉的茶壺啦 (截兩張旋轉中不同角度的圖)



2


今天的第二個程式, 我們想要給旋轉的茶壺加上打光

把 week04-1 的程式碼複製到 week04-2 , 再加入範例程式的程式碼

寫一個 myLight 函式 , 將程式碼丟進來

我們的程式碼如下


執行小黑, 看到旋轉的茶壺,還加上打光啦 (因為目前的方向不正確所以看起來暗暗的)


下一步我們來改變顏色!

glClearColor(r,g,b,a); 用來清背景的色彩 ( 目前不會用到 a )

修改後的程式碼


執行小黑, 看到旋轉中的黃色茶壺,與白色背景 ( 後面會教正確的打光方式 )



為了要更理解旋轉,我們再來看一下 Transformation.exe

嘗試調換程式碼順序,按右鍵 Swap 可以交換



交換前 ( glTranslatef 在上)

車子是以自身為中心軸自轉的!


交換後 ( glRotatef 在上)

選轉一樣的角度後發現

車子是繞著中心旋轉!



👌3


今天的第三個程式, 我們想更明顯的比較

先來看看程式碼

為了做比較,我們給兩個茶壺上不同顏色,旋轉和移動的程式碼做了交換

閱讀的方式是:我們有一個茶壺,將他染成黃色,設定好以y軸旋轉後,我們將他往右移動 0.6

第二個茶壺,將他染成紅色,先往右移動0.6後,以y軸為中心軸旋轉

思考一下!雖然是同樣的旋轉方向

但,黃色茶壺是先講好開始轉,才把他拉到右邊,所以他在右邊自轉

紅色茶壺則是先移動了,再叫他照著y軸轉,可以想像成桌菜,紅色茶壺移動到轉盤的邊緣!


執行小黑, 先來看看截圖


有些難理解吧,加上旋轉軸來看看


因為非動態圖片,效果可能不明顯,但想表達的是

紅色茶壺的旋轉軸在畫面中心 (公轉!繞著轉)

黃色茶壺的旋轉軸在自己身上 (自轉!)

👋最後


一樣!上傳 GitHub 就結束本週的課程啦











沒有留言:

張貼留言