下載上課用檔案
下載位置:https://jsyeh.org/3dcg10/
下載檔案及名稱:1. data.zip、2. win32.zip、3. glut32.dll
解壓縮
windows.zip => 獨立解出一個資料夾
data.zip => 將data解壓縮到window資料夾內
執行時可移動xyz的座標
---------------------------------------------------------------------------------------------
上課前課業資源分享:leetcode
可上此網站練習程式語言類型題目
--------------------------------------------------------------------------------------------
複習:旋轉與移動
本段程式碼由下往上讀取,意由Begin開始往上一層一層讀
範例一
籃框:表示繪製一個物件,此為圖中藍色車子
綠框:變形,將物件進行變化
黃框:旋轉,將物件做旋轉/轉動
紅框:移動,將物件進行相對位置的位移
此時的順序為=>移動到右方 (後) 旋轉 變形的 藍色車子
籃框:表示繪製一個物件,此為圖中藍色車子
綠框:變形,將物件進行變化
紅框:移動,將物件進行相對位置的位移黃框:旋轉,將物件做旋轉/轉動
此時的順序為=>旋轉 (整個) 移動到右方 變形的 藍色車子
---------------------------------------------------------------------------------------------------------------
step1-1 實作範例
week05-1_TRT_rotation_translate
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清背景
glColor3f(0,1,0); /// green
glPushMatrix(); /// 備份矩陣
glTranslatef( 0.8,0, 0); /// 讓位於正中心的茶壺往右方移動
glRotatef(angle,0,0,1); ///旋轉的角度angle ==> 轉動茶壺
glutSolidTeapot(0.3); ///劃出實心茶壺;大小0.3
glPopMatrix(); ///還原矩陣
glColor3f(1,0,0); ///red
glPushMatrix();
glRotatef(angle,0,0,1); /// 轉動茶壺
glTranslatef( 0.8, 0, 0);/// 將隨不同角度進行移動並旋轉
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers(); ///請GLUT畫面swap送到顯示的地方
angle++; /// 把角度++
}
綠色的==>自轉
紅色的==>公轉
step02-2
老師分享一個程式,可模擬機器人的手臂來行動,利用glTranslate 跟 glRotatef兩個涵式
透過下方程式碼可看出,有四塊物件、一個陣列、及T-R-T涵式
T-R-T涵式為統稱,意指:上下一個translate,中間一個rotate
myDrawObject(1);
myDrawObject(0);
glPushMatrix();
glTranslatef(0.16 ,0.20);
glRotatef(angle,0,0,1);
glTranslatef(-0.17, -0.14);
myDrawObject(2);
glPopMatrix();
myDrawObject(3); /// 藍色的那塊,不看這塊,多餘的\
--------------------------------------------------------------------------------------------------------------------
step03-1 下周小考題目-T-R-T
glPushMatrix(); ///
glTranslatef(); ///20P (3)將轉動的物件放到正確的位置
glRotatef(); ///20P (2) 轉動物件==>確定轉動角度(-+。)
glTranslatef(); ///20P (1) 把物件重/中心,放到世界中心
myObject(); ///
glPopMatrix(); ///
step03-2 TRT robot實作
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ///清背景
glColor3f(0,1,0); /// green body
glPushMatrix(); /// 備份矩陣
glutSolidCube(0.5);
glPushMatrix();
glTranslatef(0.25,0.25,0); ///(3)將紅方塊放置到要放的位置
glRotatef(angle,0,0,1); /// (2)轉動看成果是否符合預想
glTranslatef(0.25,0.25,0); ///(1)將紅方塊中心放置正中央
glColor3f(1,0,0); ///red arms
glutSolidCube(0.5);
glPopMatrix();
glPopMatrix(); ///還原矩陣
glutSwapBuffers(); ///請GLUT畫面swap送到顯示的地方
angle++; /// 把角度++
}
沒有留言:
張貼留言