1. week10-1_glutWireCube_myBody_myArm
(1)安裝freeglut
(2)開啟新專案:week10-1_glutWireCube_myBody_myArm
(3)把上週的week09-3_glutWireTeapot_glutWireCube_glutWireSphere程式碼貼上
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(-0.5, +0.3, 0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.0, +0.3, 0);
glutSolidCube(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.5, +0.3, 0);
glutSolidSphere(0.3,30,30);
glPopMatrix();
glPushMatrix();
glTranslatef(-0.5, -0.3, 0);
glutWireTeapot(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.0, -0.3, 0);
glutWireCube(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(+0.5, -0.3, 0);
glutWireSphere(0.3,30,30);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutMainLoop();
}
(4)要把void display改寫一下
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
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();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMainLoop();
}
(5)呼叫myBody()、myArm()
2. week10-2_rotate_myArm
(1)開啟新專案:week10-2_rotate_myArm
(2)貼上week10-1_glutWireCube_myBody_myArm的程式碼
(3)加一下旋轉的程式
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();
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();
}
3. week10-3_rotate_translate_myArm
(1)開啟新專案:week10-3_rotate_translate_myArm
(2)貼上week10-2_rotate_myArm的程式碼
(3)加上一行移動的程式碼
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();
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();
}
4. week10-4_translate_rotate_translate_myArm
(1)開啟新專案:week10-4_translate_rotate_translate_myArm
(2)貼上week10-3_rotate_translate_myArm的程式碼
(3)加上最後一行放最上面(掛上去)
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();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
5. week10-5_TRT_TRT_myArm
(1)開啟新專案:week10-5_TRT_TRT_myArm
(2)貼上week10-4_translate_rotate_translate_myArm的程式碼
(3)把display函數裡的手臂程式複製起來,在插入進去
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();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
6. week10-6_left_right_myArm
(1)開啟新專案:week10-6_left_right_myArm
(2)貼上week10-5_TRT_TRT_myArm的程式碼
(3)加上左半邊手臂的程式
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();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
7. week10-7_mouse_motion_angle_myArm
(1)開啟新專案:week10-7_mouse_motion_angle_myArm
(2)貼上week10-6_left_right_myArm的程式碼
(3)想要用滑鼠操控,所以angle++都改成angle(不要++);在main()加glutMotionFunc(motion),加一個void motion(int x, int y)函式
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;
glutPostRedisplay();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
8. week10-8_mouse_motion_angle_2_myArm
(1)開啟新專案:week10-8_mouse_motion_angle_2_myArm
(2)貼上week10-7_mouse_motion_angle_myArm的程式碼
(3)把display()裡面的左半邊angle改成-angle(讓左右的角度,正負相反)
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;
glutPostRedisplay();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
9. week10-9_PlaySound
(1)開啟新專案:week10-9_PlaySound
(2)貼上week10-8_mouse_motion_angle_2_myArm的程式碼
(3)先把音檔放在C槽,在#include的地方,加上#include <mmsystem.h>,在main()的第1行,加入PlaySound("C:/horse.wav", NULL, SND_ASYNC);
#include <mmsystem.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;
glutPostRedisplay();
}
int main(int argc, char*argv[])
{
PlaySound("C:/horse.wav", NULL, SND_ASYNC);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
執行後就有聲音了
10. 上傳Github










沒有留言:
張貼留言