2024年4月25日 星期四

week10

 ## week10-1_glutWireCube_myBody_myArm

1.建立專案
2.上週09-3貼上
3.把void display()改寫,呼叫myBody() myArm()

```cpp

glPushMatrix();

        glColor3f(1,0,0);

        glutWireCube(0.6);///mybody

    glPopMatrix();


    glPushMatrix();

        glColor3f(0,1,0);

        glScalef(1,0.4,0.4);

        glutWireCube(0.3);///myArm

    glPopMatrix();

```

4.分開放,要用在呼叫

##week10-2_rotate_myArm

1.建立專案
2.貼上10-1程式
3.float angle = 0;//旋轉角度
4.在main()加上glutIdleFunc(display);
5.在display() 裡面,myArm()的前後,要加上glPlushMatrix()、glPopMatrix();



((紅色方形截圖不出來((原因Arm 函式加了不該加的東西

##week10-3_Rotate_translate_myArm

1.建立專案
2.貼上10-2程式碼
3.加上glTranslated(0.15,0,0)

```cpp

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


myBody();

glPushMatrix();

        glRotatef(angle++,0,0,1);

        glTranslatef(0.15,0,1);

        myArm();

    glPopMatrix();

glutSwapBuffers();

}

```



##week10-4_translate_rotate_myArm

1.建立專案
2.貼上10-3程式碼
3.加上最後一行glTranlatef(0.3,0.3,0);放最上面 掛上去

```cpp

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


myBody();

glPushMatrix();

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

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

        glTranslatef(0.15,0,1);///(1) 把旋轉中心,放在畫面的正中心

        myArm();

    glPopMatrix();

glutSwapBuffers();

}

```



##week10-5_TRT_myArm

1.建立專案
2.貼上10-4程式碼
3.把整套 glPushMatrix(); glTranslatef() glRotatef() myArm() glPopMatrix() 插在中間

```cpp
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

myBody();
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();
glutSwapBuffers();
}
```

##week10-6_left_right_myArm

1.建立專案
2.貼上10-5程式碼
3.把整套 複製起來貼上去改一個負號

```cpp
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

myBody();
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();

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

glutSwapBuffers();
}
```

##week10-7_mouse_motion_angle_myArm

1.建立專案
2.貼上10-6程式碼
3.想要用mouse motion 來操控,所以 angle++ 都改成angle
4.在 main() 加 glutMotionFunc(motion);
5.加一個 void motion(int x, int y) 函式
完成拖曳滑鼠控制它



##week10-8_mouse_motion_angle_2_myArm

1.建立專案
2.貼上10-7程式碼
3.把 display() 裡面的左邊的angle 改成 -angle(讓左右角度,正負相反)

```cpp

#include <GL/glut.h>

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

}

float angle = 0;

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


myBody();

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


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


glutSwapBuffers();

}

void motion(int x,int y) {

    angle = x; ///加上mouse motion

    glutPostRedisplay();///告訴GLUT有空就重劃畫面

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week10");


glutDisplayFunc(display);

glutMotionFunc(motion);///有空就旋轉

glutIdleFunc(display);

glutMainLoop();

}



##week10-9_PlaySound

1.建立專案
2.貼上10-8程式碼
3.在 #include 的地方,加上 #include <windows.h> 或 #include <mmsystem.h>
4.在 main() 的第1行,加入 Playsound("c:/horse.mav",NULL,SND_ASYNC);
5.把音樂檔放進C槽


```


 




沒有留言:

張貼留言