2024年4月25日 星期四

Week10

 #week10-1_glutWireCube_myBody_myArm

0.安裝freeglut,把lib/libfreeglut.a複製成libglut32.a

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

        glutWireCube(0.3);

    glPopMatrix();

}

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    myBody();

    myArm();


glutSwapBuffers();

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week10-1_glutWireCube_myBody_myArm");

glutDisplayFunc(display);

glutMainLoop();

}

'''

#week10-2_rotate_myArm

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

2.貼上week10-1的程式

3.float angle=0;//旋轉的角度

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

5.在display()裡,myArm()前後,要加上glPushMatrix(); glPopMatrix();和glRotatef(angle++,0,0,1);

'''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);///myArm();

        glutWireCube(0.3);

    glPopMatrix();

}

float angle=0;

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    myBody();

    glPushMatrix();

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

        myArm();

    glPopMatrix();


glutSwapBuffers();

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week10");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}

'''

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

{

    glPushMatrix();

        glColor3f(1,0,0);

        glutWireCube(0.6);///myBody();

    glPopMatrix();

}

void myArm()

{

    glPushMatrix();

        glColor3f(0,1,0);

        glScalef(1,0.4,0.4);///myArm();

        glutWireCube(0.3);

    glPopMatrix();

}

float angle=0;

void display()

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


    myBody();

    glPushMatrix();

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

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

        myArm();

    glPopMatrix();


glutSwapBuffers();

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week10");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}

'''

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

{

    glPushMatrix();

        glColor3f(1,0,0);

        glutWireCube(0.6);///myBody();

    glPopMatrix();

}

void myArm()

{

    glPushMatrix();

        glColor3f(0,1,0);

        glScalef(1,0.4,0.4);///myArm();

        glutWireCube(0.3);

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

    glPopMatrix();


glutSwapBuffers();

}

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

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("week10");

glutDisplayFunc(display);

glutIdleFunc(display);

glutMainLoop();

}

'''

#week10-5_TRT_TRT_myArm

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

2.貼上week10-4的程式

3.把整套glPushMatrix(); glTranslatef(); glRotatef(); glTranslatef();  myArm(); 要插在中間

#week10-6_left_right_myArm

1.File-New-Project,GLUT專案week10-6_left_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有空時,就要重畫面

}

'''

#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 (讓左右的角度,正負相反)

#week10-9_PlaySound

1.File-New-Project,GLUT專案week10-9_PlaySound

2.貼上week10-8的程式

3.在#include的地方,加上#include <mmystem.h>

4.在main()的第1行,加入PlaySound("C:/horse.wav",NULL,SND_ASYNC);

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

沒有留言:

張貼留言