week10-1_glutWireCube_myBody_myArm畫出身體和手臂
1.安裝freeglut,把 lib\libglut.a 複製成 libglut32.a
2.新增GLUT專案=> week10-1_glutWireCube_myBody_myArm
3.貼上上週 week09-3 的程式碼
4.把 void display() 改寫一下,呼叫 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("week10-1 myBody myArm");
glutDisplayFunc(display);
glutMainLoop();
}
執行結果(兩個框框):
week10-2_rotate_myArm
1.新增GLUT專案=> week10-2_rotate_myArm
2.貼上 week10-1 的程式
3.外面加上 float angle=0; //旋轉的角度
4.在 main() 加上 glutIdleFunc(display);///有空就旋轉
5.在 display() 前加上 float angle=0; 在display裡加上 glPushMatrix();、glRotatef(angle++, 0, 0, 1);、glPopMatrix(); 在 main 裡加上 glutIdleFunc(display);
執行結果:(手臂在肚子裡旋轉)
week10-3_rotate_translate_myArm
1.新增GLUT專案=>week10-3_rotate_translate_myArm
2.貼上week10-2的程式
3.加上一行程式 =>glTranslatef(0.15, 0, 0);
程式碼:
#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");
glutDisplayFunc(display);
glutIdleFunc(display);///有空有旋轉
glutMainLoop();
}
執行結果:(手臂朝肚子正中心旋轉)
week10-4_translate_rotate_translate_myArm
1.新增GLUT專案=> week10-4_translate_rotate_translate_myArm
2.貼上 week10-3 的程式
3.加上最後一行 glTranslatef(0.3, 0.3, 0); //放最上面掛到肩膀上
執行結果:(旋轉中的手臂)
week10-5_TRT_TRT_myArm
1.新增GLUT專案=> week10-5_TRT_TRT_myArm
2.貼上 week10-4 的程式
3.把整套glPushMatrix();~glPopMatrix(); 複製貼上改數值
程式碼:
#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();///我的右上手臂
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();
}
執行結果:(旋轉中的兩段式手臂)
week10-6_left_right_myArm
1.新增GLUT專案=> week10-6_left_right_myArm
2.貼上 week10-5 的程式
3.加上左半邊手=>複製右半邊=>改數值
1.新增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) 函式
程式碼:
#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();///我的右上手臂
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)///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.新增GLUT專案=> week10-8_mouse_motion_angle_2_myArm
2.貼上 week10-7 的程式
3.把 display() 裡面的 左邊的 angle 改成 -angle (讓左右兩邊的角度,正負相反)
week10-9_PlaySound
1.新增GLUT專案=> week10-9_PlaySound
2.貼上 week10-8 的程式
3.在 #include 的地方,加上 #include <mmsystem.h>
4.在 main() 的第1行,加入 PlaySound("C:/horse.wav", NULL, SND_ASYNC);
5.把 horse.wav 放在 C: 根目錄裡
沒有留言:
張貼留言