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
///week10-1_glutWireCube_myBody_myArm
#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() 和 glRotatef(angle++, 0, 0, 1);
///week10-2_rotate_myArm
#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("week09 Microsoft Visual Studio");
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)
///week10-3_rotate_translate_myArm
#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); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的手臂
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10-3 Microsoft Visual Studio");
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); 放最後面 推上去
///week10-4_translate_rotate_translate_myArm
#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);
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-4");
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( ) glPopMatrix( ) 要插在中間
///week10-5_TRT_TRT_myArm
#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);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的手臂
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10-5");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
week10-6_left_right_myArm
1. File-New-Project , GLUT專案 week10-6_left_right_myArm
2. 貼上 week10-5的程式
///week10-6_left_right_myArm
#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);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右上臂
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右下臂
glPopMatrix();
glPopMatrix();
glPushMatrix(); ///左半邊
glTranslatef(-0.3, 0.3, 0);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的左上臂
glPushMatrix();
glTranslatef(-0.15, 0, 0);
glRotatef(angle++, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的左下臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char*argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week10-6");
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
}
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) 函式
///week10-7_mouse_motion_angle_myArm
#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);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右上臂
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右下臂
glPopMatrix();
glPopMatrix();
glPushMatrix(); ///左半邊
glTranslatef(-0.3, 0.3, 0);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的左上臂
glPushMatrix();
glTranslatef(-0.15, 0, 0);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
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-7");
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 (讓左右的角度, 正負相反)
///week10-8_mouse_motion_angle_2_myArm
#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);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右上臂
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右下臂
glPopMatrix();
glPopMatrix();
glPushMatrix(); ///左半邊
glTranslatef(-0.3, 0.3, 0);
glRotatef(-angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的左上臂
glPushMatrix();
glTranslatef(-0.15, 0, 0);
glRotatef(-angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
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-8");
glutDisplayFunc(display);
glutMotionFunc(motion); ///week10-7 加上 mouse motion
glutIdleFunc(display);
glutMainLoop();
}
week10-9_PlaySound
1. File-New-Project , GLUT專案 week10-9_PlaySound
2. 貼上 week10-8 的程式
3. 在 #include 的地方, 加上 #include <windows.h> 或 #include <mmsystem.h>
4. 在 main( ) 的第一行, 加入 PlaySound("你的wav檔.wav", Null, SND_ASYNC);
5. 把老師傳的 horse.wav 放在 C:目錄裡
///week10-9_PlaySound
#include <GL/glut.h>
#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); ///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);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右上臂
glPushMatrix();
glTranslatef(0.15, 0, 0);
glRotatef(angle, 0, 0, 1); ///旋轉的角度
glTranslatef(0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的右下臂
glPopMatrix();
glPopMatrix();
glPushMatrix(); ///左半邊
glTranslatef(-0.3, 0.3, 0);
glRotatef(-angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
myArm(); ///我的左上臂
glPushMatrix();
glTranslatef(-0.15, 0, 0);
glRotatef(-angle, 0, 0, 1); ///旋轉的角度
glTranslatef(-0.15, 0, 0); ///右移 把選轉中心, 放在畫面的正中心
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-9");
glutDisplayFunc(display);
glutMotionFunc(motion); ///week10-7 加上 mouse motion
glutIdleFunc(display);
glutMainLoop();
}
沒有留言:
張貼留言