2022年5月16日 星期一

Qinye_week13

  111/05/16上課筆記

WEEK13-1 用方塊實作

1.基本TRT
glPushMatrix();
    glTranslatef(x, y, z);
    glRotatef(
angle, 0, 0, 1);
    glTranslatef(x, y, z);
glPopMatrix();
2.新增一專案,貼上10行程式碼,在display()中新增一四邊形
3.加入小手臂(紅方塊)&TRT程式碼
更改座標為(1.0, 0.3)
-將手臂中間關節座標移動到中心
-旋轉45
-移回0.5,0.5
4.增加滑鼠(mouse)函數、動作(motion)函數,可用滑鼠滑動揮手
完整程式碼:

WEEK13-2 瘦身,加新手臂

1.新增一專案
2.部分修改+新增綠色手臂
原:glRectf(0.5, 0.5, -0.5, -0.5);///四邊形Rectangle,表白色身體
    glPushMatrix();
        glTranslatef(0.5, 0.5, 0);///等下要掛到0.5,0.5
-更改右寬(+X座標),手臂的寬(皆在第一象限)
-更改左寬(-X座標)下高(-Y座標)
改:glRectf(0.3, 0.5, -0.3, -0.2);///四邊形Rectangle,表白色身體
    glPushMatrix();
        glTranslatef(0.3, 0.5, 0);///等下要掛到0.5,0.5
        glRotatef(angle, 0, 0, 1);///Z軸,(2)旋轉45度
        glTranslatef(-0.3, -0.4, 0);///(1)把旋轉中心放到正中心
        glColor3f(1, 0, 0);
        glRectf(0.3, 0.5, 0.8, 0.3);///畫手臂,改短
-增加下手肘
    glPushMatrix();
        ///(3)把下手肘掛在關節上
        ///(2)旋轉
        ///(1)把下手肘的旋轉中心,放正中心
        glColor3f(0,1,0);
        glRectf(0.8, 0.5, 1.1, 0.3);///畫下手肘
    glPopMatrix();

-旋轉下手肘
        glPushMatrix();
            glTranslatef(0.8, 0.4, 0);///(3)把下手肘掛在關節上
            glRotatef(angle, 0, 0, 1);///(2)旋轉
            glTranslatef(-0.8, -0.4, 0 );///(1)把下手肘的旋轉中心,放正中心
            glColor3f(0,1,0);
            glRectf(0.8, 0.5, 1.1, 0.3);///畫下手肘
        glPopMatrix();


完整程式碼:

WEEK13-3 對稱,增加第二隻手臂

1.新增專案
2.複製最大矩陣的程式碼,把X座標正負相反修改(水平相反)
-問題:關節全部一起控制,無法單一控制
-改善:關節角度分開,建立多個關節。
float angle  = 0; ->代表只有一個關節
float angle[20]; ->代表有20個關節
-更改:
-將單一變數(angle=0)改為陣列放多個關節
float angle[20];///改為陣列
*設20的原因為人體手腳關節(不含指)可大致上分做20個
-給予關節ID
int angleID = 0 ;///0:第0個關節,1:第1個關節,2:第2個關節
-設一新函式->keyboard,設定按下的按鍵代表哪一個ID
-設定好每個關節的ID(寫死)
glRotatef(angle[0], 0, 0, 1);///Z軸,(2)旋轉45度
*angle[X]的數值為motion中滑鼠的移動數值
*每個TRT中的R皆要做變動
-在函式motion中,將移動的X值(angle值)放入陣列

-在main函式中增加keyboard動作
glutKeyboardFunc(keyboard);
結果:
完整程式碼:






沒有留言:

張貼留言