##小考預告T-R-T轉動
glPushMatrix();
glTranslatef(0.3,0.3,0);///移動後的位置
glRotatef(angle++,0,0,1);///(2)旋轉的角度
glTranslatef(0.15,0,0);///(1)原本的位置正負相反
drawHand();
glPopMatrix();
##week10-1_glutWireCube_myBody_myArm
1.File-New-Project,GLUT專案,week10-1_glutWireCube_myBody_myArm
2.貼上上周的week09-3_glutWireTeapot_guldWireCube_glutWireSphere
3.要把 void display()改寫一下,呼叫 myBody() myArm()
```cpp
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///備份矩陣
///glTranslatef(+0.0,+0.3,0);
glColor3f(1,0,0);///紅色的
glutWireCube(0.6);///myBody()
glPopMatrix();///還原矩陣
glPushMatrix();
glColor3f(0,1,0);///綠色的
glScalef(1,0.4,0.4);///myArm();
glutWireCube(0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutMainLoop();
}
```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);///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("week09 Microsoft Visual Studio");
glutDisplayFunc(display);
glutMainLoop();
}
##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() 和
glRotated(anfle++,0,0,1);
```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);///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_translatef_myArm
1.File-New-Project,GLUT專案,week10-3_rotate_translatef_myArm
2.貼上week10-2的程式
3.加上glTranslatef(0.15,0,0);
```cpp
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();
}
##week10-4_translatef_rotatef_translatef_myArm
1.File-New-Project,GLUT專案,week10-4_translatef_rotatef_translatef_myArm
2.貼上week10-3的程式
3.加上最後一行 glTranslatef(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,0);///(1)把旋轉的中心,放在畫面正中心
myArm();///我的手臂
glPopMatrix();
glutSwapBuffers();
}
##week10-5_TRT_TRT_myArm
1.File-New-Project,GLUT專案,week10-5_TRT_TRT_myArm
2.貼上week10-4的程式
3.要把整套glPushMatrix();加進去
```cpp
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();
}
##week10-6_left_right_myArm
1.File-New-Project,GLUT專案,week10-6_left_right_myArm
2.貼上week10-5的程式
3.改成負的
```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();
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.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(刪掉angle++的++)
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();
```(新增)
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
1.File-New-Project,GLUT專案,week10-8_mouse_motion_angle_2_myArm
2.貼上week10-7的程式
3.把display()裡面的 左邊的angle 改成-angle
(讓左右的角度,正負相反)
```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();
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-9_PlaySound
1.File-New-Project,GLUT專案,week10-9_PlaySound
2.貼上week10-8的程式
3.在 #include的地方,加上 #include<mmsystem.h>
4.在main()的第一行,加上PlaySound("C:/horse.wav",NULL,SND_ASYNC)
5.把老師給你的horse.wav放在C:根目錄裡
```cpp
#include <GL/glut.h>
#include <mmsystem.h>
```
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);///week10-7加上mouse motion
glutIdleFunc(display);///有空就旋轉
glutMainLoop();
}
沒有留言:
張貼留言