# 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();
```


沒有留言:
張貼留言