今天要教的是階層轉動
複習上禮拜TRT轉動
1.打開CodeBlocks,開啟新的GLUT Project
2.去github複製week05_TRT_robot的程式碼
3.更改幾行程式碼
glutSolidSphere(0.02,30,30);
glPushMatrix();
glRotatef(angle,0,0,1);
glTranslatef(0.46,-0.05,0);///轉動的中心點
glutSolidTeapot(0.3);
glPopMatrix();
階層轉動Hierarchy
(簡單說就是多個T-R-T)
再新增一個茶壺當作是右手肘,接在右手臂上
最後
開啟新專案,把程式碼稍微修改
1.增加新的茶壺(右手臂),使它在中心點上
2.移動另一個茶壺(身體)的位置(手把接到中心茶壺的壺口)
3.成功在壺口轉動
*轉動的茶壺不必更動中心點*
glutSolidSphere(0.02,30,30);///正中心的圓球
glutSolidTeapot(0.3);///身體
glPushMatrix();///右手臂
///先註解掉glTranslatef(-0.5,0.5,0);
glTranslatef(0.49,0.13,0);///新的
glRotatef(angle,0,0,1);///可轉動
glTranslatef(0.46,-0.05,0);///把轉動的中心,放中心
glutSolidTeapot(0.3);
glPopMatrix();
再新增一個茶壺當作是右手肘,接在右手臂上
淺藍色框起來是右手臂,紅色框框是右手肘
增加右下手肘,並跑看看結果
這樣右下手肘就會在右上臂的右邊轉動開新的專案出來,並複製上週week05_TRT_robot的程式碼,畫出身體、手臂,做出左右手在身體上的轉動。
利用drawHand()函式精簡化TRT,讓程式不要看起來太亂。
程式碼
float angle = 0;
void drawHand()
{
glPushMatrix();
glScalef( 1 , 0.3 , 0.3 );
glutSolidCube(0.5);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();///(3)掛上去
glRotatef(angle , 0 , 0 , 1);///(2)轉動
glTranslatef(0.25 , 0 , 0 );///(1)把中心放在政中心
drawHand();
glPopMatrix();
glutSwapBuffers();
angle++;///角度增加
}
最後
把右上手臂的程式碼註解弄掉(讓它跟著一起轉動)
接著複製右上手臂跟右下手肘的程式碼(做出左手臂跟左下手肘)
做出左右手臂一起轉動
沒有留言:
張貼留言