{\__/}
( • - •)
< \
\實作TRT成品圖/
\實作TRT成品圖/
注意事項 : 同一隻手的上下臂要放在同個glPushMatrix和glPopMatrix的中間才會連在一起,不同隻手就要分開,不然第二隻手會不見 !
#include <GL/glut.h>
float angle1=0, angle2=0, angle3=0, angle4=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.5, 0.15, 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.45, 0.15, 0);///(3) 掛在身體的左肩
glRotatef(angle3, 0,0,-1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///左手臂
glPushMatrix();///NOW3
glTranslatef(0.2, 0, 0);///(3) 掛在身體的左肘///NOW3
glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW3
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW3
glColor3f(1,0,0);///紅色的///NOW3
glutSolidTeapot( 0.15 );///左下手臂///NOW3
glPopMatrix();///NOW3
glPopMatrix();
glPushMatrix();///右邊腳
glTranslatef(0.15, -0.25, 0);///(3) 掛在身體的右腳
glRotatef(angle1, 0,0,1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///右腳
glPushMatrix();///NOW4
glTranslatef(0.2, 0, 0);///(3) 掛在身體的右膝///NOW4
glRotatef(angle2, 0,0,1);///(2) 旋轉///NOW4
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW4
glColor3f(1,0,0);///紅色的///NOW4
glutSolidTeapot( 0.15 );///右小腿///NOW4
glPopMatrix();///NOW4
glPopMatrix();
glPushMatrix();///左邊腳
glTranslatef(-0.15, -0.25, 0);///(3) 掛在身體的左腳
glRotatef(angle3, 0,0,-1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///左腳
glPushMatrix();///NOW5
glTranslatef(0.2, 0, 0);///(3) 掛在身體的左膝///NOW5
glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW5
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW5
glColor3f(1,0,0);///紅色的///NOW5
glutSolidTeapot( 0.15 );///左小腿///NOW5
glPopMatrix();///NOW5
glPopMatrix();
glutSwapBuffers();
//angle++;///NOW//變成滑鼠旋轉
}
int oldX,oldY;
void motion(int x, int y)///NOW3 用滑鼠mouse來控制angle
{
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 配合鍵盤
oldX=x;///NOW5
display();///NOW3 用滑鼠mouse來控制angle
}
void mouse(int button,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 配合鍵盤
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week11 TRT");
glutIdleFunc(display);///NOW
glutDisplayFunc(display);
glutMotionFunc(motion);///NOW3 用滑鼠mouse來控制angle
glutKeyboardFunc(keyboard);///NOW6 配合鍵盤
glutMainLoop();
}
\來看看程式碼/
float angle1=0, angle2=0, angle3=0, angle4=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.5, 0.15, 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.45, 0.15, 0);///(3) 掛在身體的左肩
glRotatef(angle3, 0,0,-1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///左手臂
glPushMatrix();///NOW3
glTranslatef(0.2, 0, 0);///(3) 掛在身體的左肘///NOW3
glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW3
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW3
glColor3f(1,0,0);///紅色的///NOW3
glutSolidTeapot( 0.15 );///左下手臂///NOW3
glPopMatrix();///NOW3
glPopMatrix();
glPushMatrix();///右邊腳
glTranslatef(0.15, -0.25, 0);///(3) 掛在身體的右腳
glRotatef(angle1, 0,0,1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///右腳
glPushMatrix();///NOW4
glTranslatef(0.2, 0, 0);///(3) 掛在身體的右膝///NOW4
glRotatef(angle2, 0,0,1);///(2) 旋轉///NOW4
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW4
glColor3f(1,0,0);///紅色的///NOW4
glutSolidTeapot( 0.15 );///右小腿///NOW4
glPopMatrix();///NOW4
glPopMatrix();
glPushMatrix();///左邊腳
glTranslatef(-0.15, -0.25, 0);///(3) 掛在身體的左腳
glRotatef(angle3, 0,0,-1);///(2) 旋轉
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸
glColor3f(1,0,0);///紅色的
glutSolidTeapot( 0.15 );///左腳
glPushMatrix();///NOW5
glTranslatef(0.2, 0, 0);///(3) 掛在身體的左膝///NOW5
glRotatef(angle4, 0,0,-1);///(2) 旋轉///NOW5
glTranslatef(0.15, 0,0);///(1) 把茶壼柄,移動到畫面的中心,當旋轉軸///NOW5
glColor3f(1,0,0);///紅色的///NOW5
glutSolidTeapot( 0.15 );///左小腿///NOW5
glPopMatrix();///NOW5
glPopMatrix();
glutSwapBuffers();
//angle++;///NOW//變成滑鼠旋轉
}
int oldX,oldY;
void motion(int x, int y)///NOW3 用滑鼠mouse來控制angle
{
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 配合鍵盤
oldX=x;///NOW5
display();///NOW3 用滑鼠mouse來控制angle
}
void mouse(int button,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 配合鍵盤
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow("week11 TRT");
glutIdleFunc(display);///NOW
glutDisplayFunc(display);
glutMotionFunc(motion);///NOW3 用滑鼠mouse來控制angle
glutKeyboardFunc(keyboard);///NOW6 配合鍵盤
glutMainLoop();
}
沒有留言:
張貼留言