2024年4月25日 星期四

BK Week10

# week10

## week10-1_glutWireCube_myBody_myArm

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

1. File-New-project, GLUT專案, week10-1_glutWireCube_myBody_myArm

2. 貼上 week09-3_glutWireTeapot_glutWireCube_glutWireSphere 的程式碼

3. 要把 void display() 改寫一下, 呼叫 myBody() myArm()

```cpp

    void myBody(){///我的身體

        glPushMatrix();

            glColor3f(1, 0, 0);///紅色的

            glutWireCube(0.6);///myBody()

        glPopMatrix();

     }

    void myArm(){///我的身體

        glPushMatrix();

            glColor3f(0, 1, 0);///綠色的

            glScalef(1, 0.4, 0.4);///大小

            glutWireCube(0.3);///myArm()

        glPopMatrix();

     }

    void display(){

        myBody();///我的身體

        myArm();///我的手臂

    }

```



## week10-2_Rotate_myArm

1. File-New-project, GLUT專案, week10-2_Rotate_myArm

2. 貼上 week10-1 的程式碼

3. 外面加上 float angle = 0; //旋轉角度

4. 在 main() 加上 glutIdleFunc(display); //有空就旋轉

5. 在 display() 裡, myArm() 的前後, 要加上 glPushMatrix() glPopMatrix(), 並加上 Rotate 函式

6. 新增的程式碼如下(橘色部分)

```cpp

    float angle = 0;

    void display(){

        glPushMatrix();

            glRotatef(angle++, 0, 0, 1);///旋轉角度

            myArm();///我的手臂

        glPopMatrix();

    }

    int main(int argc, char*argv[]){

        glutIdleFunc(display);///有空就旋轉

    }

```



## week10-3_Rotate_translate_myArm

1. File-New-project, GLUT專案, week10-3_Rotate_translate_myArm

2. 貼上 week10-2 的程式碼

3. 加上 glTranslatef(0.15, 0, 0);

```cpp

    void display()

    {

        glPushMatrix();

            glTranslatef(0.15, 0, 0);

        glPopMatrix();

    }

```


## week10-4_translate_rotate_translate_myArm

1. File-New-project, GLUT專案, week10-4_translate_rotate_translate_myArm

2. 貼上 week10-3 的程式碼

3. 加上最後一行 glTranslatef(0.3, 0.3, 0);

```cpp

    void display()

    {

        glPushMatrix();

            glTranslatef(0.3, 0.3, 0);///(3)掛到肩上

            glRotatef(angle++, 0, 0, 1);///(2)旋轉角度

            glTranslatef(0.15, 0, 0);///(1)把旋轉中心放在左上角

            myArm();///我的手臂

        glPopMatrix();

    }

```


## week10-5_TRT_TRT_myArm

1. File-New-project, GLUT專案, week10-5_TRT_TRT_myArm

2. 貼上 week10-4 的程式碼

3. 把整套 glPusgMatrix(); glTranslatef(); glRotatef(); glTranslatef(); myArm(); glPopMatrix(); 插到中間, 如下所示(橘色部分)

```cpp

    glPushMatrix();

            glTranslatef(0.3, 0.3, 0);///(3)掛到肩上

            glRotatef(angle++, 0, 0, 1);///(2)旋轉角度

            glTranslatef(0.15, 0, 0);///(1)把旋轉中心放在左上角

            myArm();///我的手臂

            glPushMatrix();

                glTranslatef(0.15, 0, 0);///(3)掛到肩上

                glRotatef(angle++, 0, 0, 1);///(2)旋轉角度

                glTranslatef(0.15, 0, 0);///(1)把旋轉中心放在左上角

                myArm();///我的手臂

            glPopMatrix();

        glPopMatrix();

```


## week10-6_laft_right_myArm

1. File-New-project, GLUT專案, week10-6_lrft_right_myArm

2. 貼上 week10-5 的程式碼



## week10-7_mouse_motion_angle_myArm

1. File-New-project, GLUT專案, week10-7_mouse_motion_angle_myArm

2. 貼上 week10-6 的程式碼

3. 想要用 mouse motion 來操控, 所以 angle++ 都改成 angle (不要++)

4. 在 main () 加 glutMotionFunc (motion);

5. 加一個 void motion (int x, int y) 函式

```cpp

    void motion(int x, int y){

        angle = x;

        glutPostRedisplay(); //告訴GLUT, 貼上便利貼, 請GLUT有空時, 就要重畫畫面

    }

    int main(int argc, char*argv[]){

        glutMotionFunc(motion);

    }

```

6. 可以利用 mouse 移動手臂


## week10-8_mouse_motion_angle_2_myArm

1. File-New-project, GLUT專案, week10-8_mouse_motion_angle_2_myArm

2. 貼上 week10-7 的程式碼

3. 把 display() 裡面的 左邊的 angle 改成 -angle

4. 最後左右兩邊的手繪對稱轉



## week10-9_playsound

1. File-New-project, GLUT專案, week10-9_playsound

2. 貼上 week10-8 的程式碼

3. 在 include 的地方, 加上 #include <window.h> 或 #include <mmsystem.h>

4. 在 main() 的第1行, 加入 Playsound("你的wav檔.wav", NULL, SND_ASYNC );

5. 把音檔 horse.wav 放在 C:根目錄裡

6. 最後開始執行時會有聲音

沒有留言:

張貼留言