#Week10
0.freeglut
week10-1_glutWireCube_myBody_myArm
貼上week09-3 的程式
改寫 void display()改寫一下 呼叫myBody() myArm()
留下wireCube
綠色手臂 紅色是身體
-----------------------------------------------------------------------------------------------------------------------------
#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);///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");
glutDisplayFunc(display);
glutMainLoop();
}
-----------------------------------------------------------------------------------------------------------------------------
week10-2_rotate_myArm
加上float angle = 0; #旋轉的角度
-----------------------------------------------------------------------------------------------------------------------------
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
貼上week10-2程式
-----------------------------------------------------------------------------------------------------------------------------
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();
}
-----------------------------------------------------------------------------------------------------------------------------
week10-4_translate_rotate_translate_myArm
貼上week10-3程式
加上一行glTranslatef(0.3, 0.3, 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(); ///我的手臂/// week10-3_rotate_translate_myArm
glPopMatrix();
glutSwapBuffers();
}
-----------------------------------------------------------------------------------------------------------------------------
week10-5_TRT_TRT_myArm
week10-6_left_right_myArm
貼上10-5的程式...
week10-7_mouse_motion_angle_myArm
用滑鼠控制手臂
在main加上glutMotionFunc(motion)
再加上void motion(int x, int y)
-----------------------------------------------------------------------------------------------------------------------------
#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);///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(); ///我的右上手臂/// week10-3_rotate_translate_myArm
glPushMatrix();
glTranslatef(0.15, 0, 0); ///(3) 掛到手肘上
glRotatef(angle, 0, 0, 1);///(2) 旋轉
glTranslatef(0.15, 0, 0); ///(1) 把旋轉中心, 放在畫面的正中心
myArm(); ///我的右下手臂/// week10-3_rotate_translate_myArm
glPopMatrix();
glPopMatrix();
glPushMatrix(); ///左半邊
glTranslatef(-0.3, 0.3, 0); ///(3) 掛到肩上
glRotatef(-angle, 0, 0, 1);///(2) 旋轉
glTranslatef(-0.15, 0, 0); ///(1) 把旋轉中心, 放在畫面的正中心
myArm(); ///我的左上手臂/// week10-3_rotate_translate_myArm
glPushMatrix();
glTranslatef(-0.15, 0, 0); ///(3) 掛到手肘上
glRotatef(-angle, 0, 0, 1);///(2) 旋轉
glTranslatef(-0.15, 0, 0); ///(1) 把旋轉中心, 放在畫面的正中心
myArm(); ///我的左下手臂/// week10-3_rotate_translate_myArm
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y) { ///week10-7 加上 mouse motion
angle = x; ///week10-7 加上 mouse motion
glutPostRedisplay(); ///告訴GLUT,貼上便利貼,請GLUT有空時, 就要重畫畫面
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10");
glutDisplayFunc(display);
glutMotionFunc(motion); ///week10-7 加上 mouse motion
glutIdleFunc(display); ///有空就旋轉
glutMainLoop();
}
-----------------------------------------------------------------------------------------------------------------------------
week10-8_mouse_motion_angle_2_myArm
貼上week10-7 程式
將display()的angle 改成-angle (左右角度正負相反)
week10-9_PlaySound
貼上week10-8的程式
在include的地方,加上#include<windows.h> 或#include<mmsystem.h>
在main函式第一行加入
PlaySound("C:/wav檔案wav", NULL, SND_ASYNC); ///播放聲音, 檔案放在C:根目錄
沒有留言:
張貼留言