2019年5月3日 星期五

幫我稱10秒!_week11

練習階層轉動,實做像是人體骨架的旋轉,。
先做好一個地方後,後面的程式就比較容易打出來了。

程式很多 看註解很容易懂
#include <GL/glut.h> float angle1=0, angle2=0, angle3=0, angle4=0,angle5=0,angle6=0,angle7=0,angle8=0;///NOW ///NOW6 配合鍵盤 int jointID=1;///NOW6 配合鍵盤 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(255,255,255);///白色的 glutSolidTeapot( 0.3 );///身體 glPushMatrix();///右邊手臂 glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肩 glRotatef(angle1, 0,0,1);///(2) 旋轉 glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 glColor3f(1,0,0);///紅色的 glutSolidTeapot( 0.15 );///右手臂 glPushMatrix();///NOW2 glTranslatef(0.2, 0, 0);///(3) 掛在身體的右肘///NOW2 glRotatef(angle2, 0,0,1);///(2) 旋轉///NOW2 glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 glColor3f(1,0,0);///紅色的///NOW2 glutSolidTeapot( 0.15 );///右下手臂///NOW2 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///左邊手臂 glTranslatef(-0.2, 0, 0);///(3) 掛在身體的左肩 glRotatef(angle3, 0,0,-1);///(2) 旋轉 glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸 glColor3f(1,0,0);///紅色的 glutSolidTeapot( 0.15 );///左手臂 glPushMatrix();///NOW2 glTranslatef(-0.2, 0, 0);///(3) 掛在身體的左肘///NOW2 glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW2 glTranslatef(-0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW2 glColor3f(1,0,0);///紅色的///NOW2 glutSolidTeapot( 0.15 );///左下手臂///NOW2 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///右邊大腿 glTranslatef(0.2, -0.4, 0); glRotatef(angle5, 0,0,1); glTranslatef(0.15,0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPushMatrix();///NOW2 glTranslatef(0.2, 0, 0); glRotatef(angle6, 0,0,1); glTranslatef(0.15, 0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 );///右小腿 glPopMatrix();///NOW2 glPopMatrix(); glPushMatrix();///左邊大腿 glTranslatef(-0.2, -0.4, 0); glRotatef(angle7, 0,0,-1); glTranslatef(-0.15,0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPushMatrix();///NOW2 glTranslatef(-0.2, 0, 0); glRotatef(angle8, 0,0,-1); glTranslatef(-0.15, 0,0); glColor3f(1,0,0); glutSolidTeapot( 0.15 ); glPopMatrix();///右小腿 glPopMatrix(); glutSwapBuffers(); } int oldX,oldY; void motion(int x,int y)//用滑鼠來設定x,y { if(jointID==1) angle1 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==2) angle2 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==3) angle3 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==4) angle4 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==5) angle5 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==6) angle6 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==7) angle7 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 if(jointID==8) angle8 += (x-oldX);///NOW3 用滑鼠mouse來控制angle ///NOW6 配合鍵盤 oldX=x;///NOW5 display();///NOW3 用滑鼠mouse來控制angle } void mouse(int botton,int state,int x,int y) { oldX = x; oldY=y; } void keyboard(unsigned char key, int x, int y)///NOW6 配合鍵盤 { if(key=='1') jointID=1;///NOW6 配合鍵盤 if(key=='2') jointID=2;///NOW6 配合鍵盤 if(key=='3') jointID=3;///NOW6 配合鍵盤 if(key=='4') jointID=4;///NOW6 配合鍵盤 if(key=='5') jointID=5;///NOW6 配合鍵盤 if(key=='6') jointID=6;///NOW6 配合鍵盤 if(key=='7') jointID=7;///NOW6 配合鍵盤 if(key=='8') jointID=8;///NOW6 配合鍵盤 } int main(int argc, char**argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH ); glutCreateWindow("week11 TRT"); glutIdleFunc(display); glutMotionFunc(motion);///用滑鼠來控制angle glutMouseFunc(mouse);///now5要知道滑鼠的案件狀況 glutKeyboardFunc(keyboard);///NOW6 配合鍵盤 glutDisplayFunc(display); glutMainLoop(); }


馬力歐跳躍

沒有留言:

張貼留言