2024年5月9日 星期四

BK Week12

# week12

## week12-1_glm_gundam_handA_handB

0. 下載 freeglut 至桌面, 並解壓縮, 更改 lib 中的檔名

1. 安裝 OpenCV

2. 重開 CodeBlocks, 改Setting - Compiler

3. Setting-Complier 要加入 OpenCV 相關的3個設定

    a. compiler 的 include 要加入 C:\OpenCV2.1\include

    b. linker 的 lib 要加入 C:\OpenCV2.1\lib

    c. linker 設定, 要加入 cv210 cxcore210 highgui210

4. 再把 GitHub 的程式倉庫下載下來

5. 更改 week11-2_obj_gundam_opencv_texture_lighting 目錄名

    為 week12-1_glm_gundam_handA_handB

6. 更改 .cbp 檔的檔名為 week12-1_glm_gundam_handA_handB

7. 再用 Notepad++ 開啟 .cbp檔, 改Title為 week12-1_glm_gundam_handA_handB

8. File-New-project, GLUT專案, week12-1_glm_gundam_handA_handB

9. 把 void display() 的 myBody(); glRotatef(angle++, 0, 1, 0); 註解掉

10. 加上下方橘色部分程式碼

```cpp

    ......

    glutSolidSphere(0.1, 30, 30); ///加一個圓球體代表轉動中心

    glEnable(GL_TEXTURE_2D);

     ......

    glTranslatef(-0.3, 0.3, 0);///(3)放到左上角

    glRotatef(angle++, 0, 0, 1);///(2)對z軸轉

    glTranslatef(0, -0.3, 0); ///(1)把旋轉軸放到正中心

    drawhanda();

    glPushMatrix(); ///加這行, 讓它轉動

        glTranslatef(+0.3, 0.3, 0);///(3)放到右上角

        glRotatef(angle++, 0, 0, -1);///(2)對-z軸轉

        glTranslatef(0, -0.3, 0); ///(1)把旋轉軸放到正中心

        drawhandb(); //glutSolidTeapot( 0.3 );

    glPopMatrix(); ///加這行, 讓它轉動

    ......

```

10. 把 myBody(); 還回去

11. 最後執行出現兩隻手在左右兩邊的肩膀轉




## week12-2_glm_gundam_upper_lower

1. 要把上手臂、下手臂 切好 讀入

    a. 打開 Maya, 把 handa.obj 讀入, 切割出 upperA.obj 和 lowerA.obj

2. 再把 week12-1_glm_gundam_handA_handB 複製成 week12-2_glm_gundam_upper_lower

3. 更改 .cbp 檔的檔名為 week12-2_glm_gundam_upper_lower

4. 再用 Notepad++ 開啟 .cbp檔, 改Title為 week12-2_glm_gundam_upper_lower

5. 加橘色部分程式 

```cpp

    GLMmodel * pmodel = NULL;

    GLMmodel * handa = NULL;

    GLMmodel * handb = NULL;

    GLMmodel * upperA = NULL;

    GLMmodel * lowerA = NULL;

```

6. 然後把全部的 handa 改成 upperA, hanb 改成 lowerA

7. 接著先把 myBody(); 註解

8. 把剛剛 handA 和 handB 的 T - R - T 刪掉

9. 加橘色部分程式 

```cpp

    drawupperA();

    glPushMatrix(); ///(0)

        glTranslatef(-0.05, -0.1, 0); ///(3)再掛到上手臂的位置

        glRotatef(angle++, 1, 0, 0); ///(2)x軸轉

        glTranslatef(0, -0.2, 0); ///(1)

        drawlowerA();

    glPopMatrix(); ///(0)

```

10. 接著把 glutSolidSphere(0.1, 30, 30); 註解掉

11. 微調 T - R - T 數值, 讓上下手臂對準

12. 把 T - R - T 的 glRotatef(angle++, 1, 0, 0) 改成 glRotatef(angle, 1, 0, 0)

13. void display() 增加下面橘色部分程式碼

```cpp

    angle += da;

    if(angle>90) da = -1;

    if(angle<0) da = +1;

```




## week12_3_glm_gundam_keyboard_angleID_mouse_motion_angle

1. 把 week12-2_glm_gundam_upper_lower 複製成 

    week12_3_glm_gundam_keyboard_angleID_mouse_motion_angle

2. 利用 mouse motion 來改變 angle

3. 加入下方橘色部分程式碼

```cpp

    float angle = 0, da = 1; 

    void motion(int x, int y){ //加入mouse motion 對應的函式

        angle = y; // 當我們的 mouse motion 時, y座標的對應角度

    }

```

4. int main(int argc, char*argv[]) 加上 glutMotionFunc(motion);

5. 把 void display() 的 angle += da; if(angle>90) da = -1; if(angle<0) da = +1; 註解掉

6. 先把 glutSolidSphere(0.1, 30, 30); 還給他

7. 把 glRotatef(angle, 1, 0, 0); 註解掉

8. 把原本的 T - R - T 函式外面再包一層 T - R - T 函式

```cpp

    glPushMatrix();

        ///glTranslatef(...); ///掛在肩上

        glRotatef(angle, 0, 0, 1);

        glTranslatef(0, -0.07, 0)

        ......

    glPopMatrix();

```

沒有留言:

張貼留言