2023年3月15日 星期三

DTang---T-R-T_特定旋轉軸

前置作業

下載上課用檔案

下載位置: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++; ///  把角度++

}












沒有留言:

張貼留言