Week10主題:TRT關節、階層性轉動
week10-1_glutWireCube_myBody_myArm
1.安裝freeglut,複製libfreeglut.a改成libglut32.a
2.新增專案取名成week10-1_glutWireCube_myBody_myArm
3.貼上week09-3_glutWireTeapot_glutWireCube_glutWireSphere
4.把void display()改寫,新增並呼叫myBody() myArm()
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();
}
week10-2_rotate_myArm
1.新增專案取名成week10-2_rotate_myArm
2.貼上week10-1_glutWireCube_myBody_myArm
3.增加全域變數 float angle=0;///旋轉角度
4.在main()中加上glutIdleFunc(display);///自動旋轉
5.在display()中新增glRotatef()讓myArm()旋轉
glPushMatrix();
glRotatef(angle++, 0, 0, 1);
myArm();///呼叫綠色手臂
glPopMatrix();
week10-3_rotate_translate_myArm
1.新增專案取名成week10-3_rotate_translate_myArm
2.貼上week10-2_rotate_myArm
3.新增glTranslatef(0.15, 0, 0);///旋轉中心不變(目前在(0,0)),物件往右移動0.15
week10-4_translate_rotate_translate_myArm
1.新增專案取名成week10-4_translate_rotate_translate_myArm
2.貼上week10-3_rotate_translate_myArm
3.新增glTranslatef(0.3, 0.3, 0);///把旋轉中心移到右上
glPushMatrix();
glTranslatef(0.3, 0.3, 0);///
glRotatef(angle++, 0, 0, 1);
glTranslatef(0.15, 0, 0);
///旋轉中心不變(目前在(0.3,0.3,0)),物件往右移動0.15
myArm();///呼叫綠色手臂
glPopMatrix();
week10-5_TRT_TRT_myArm
1.新增專案取名成week10-5_TRT_TRT_myArm
2.貼上week10-4_translate_rotate_translate_myArm
3.新增一套畫手插入原myArm()下一行
glPushMatrix();
glTranslatef(0.15, 0, 0);///掛到肩上後再往右0.15
glRotatef(angle++, 0, 0, 1);///旋轉
glTranslatef(0.15, 0, 0);
///旋轉中心不變(目前在(0.45,0.3,0)),物件往右移動0.15
myArm();
glPopMatrix();
week10-6_left_right_myArm
1.新增專案取名成week10-6_left_right_myArm
2.貼上week10-5_TRT_TRT_myArm
3.新增左手,X軸移動(改負號)
glPushMatrix();
glTranslatef(-0.3, 0.3, 0);///掛到肩上
glRotatef(angle++, 0, 0, 1);///旋轉
glTranslatef(-0.15, 0, 0);
myArm();///呼叫綠色手臂
glPushMatrix();
glTranslatef(-0.15, 0, 0);///掛到肩上後再往左0.15
glRotatef(angle++, 0, 0, 1);///旋轉
glTranslatef(-0.15, 0, 0);
myArm();
glPopMatrix();
glPopMatrix();
week10-7_mouse_motion_angle_myArm
1.新增專案取名成week10-7_mouse_motion_angle_myArm
2.貼上week10-6_left_right_myArm
3.為了用mouse motion來操控,angle++改成angle
4.在main()中加上glutMotionFunc(motion);
5.新增void motion(int x,int y)函式
void motion(int x,int y){
angle = x;
glutPostRedisplay();///告訴GLUT有空時,重製畫面
}
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
week10-9_PlaySound
功能是增加音樂
1.新增專案取名成week10-9_PlaySound
2.貼上week10-8_mouse_motion_angle_2_myArm
3.增加<windows.h>或<mmsystem.h>標頭檔
4.在main()中加入PlaySound("C:/horse.wav", NULL, SND_ASYNC);
(電腦直接讀wav檔,mp3很複雜~)
5.把老師給的horse.wav音檔移到C槽根目錄
沒有留言:
張貼留言