2022/5/3 第十二周
主題 : T-R-T(移動-旋轉-移動)對特定軸旋轉
1.下載範例: windows、data.zip ,Transformation.exe
## 按右鍵Swap 可以交換T(移動)、R(轉動)
(1)在右邊轉動的藍色車子: 自轉
glTranslatef( 0.9 , 0.0 , 0.0 ) ; /// 移動 到右邊
glRotatef(角度, 0, 1 , 0); ///旋轉
畫一台藍色車子
---->移到右邊 轉動中的 大小正常的藍色車子 (跟著車子移動軸心到右邊在轉動車子)
(2)繞著中間轉彎的藍色車子: 公轉
glRotatef(角度, 0, 1 , 0); ///旋轉
glTranslatef( 0.9 , 0.0 , 0.0 ) ; /// 移動 到右邊
畫一台藍色車子
---->轉動 移到右邊的 大小正常的藍色車子 (軸心在中間,車子移動到旁邊,對著中心軸旋轉車子)
2. 用另一個程式理解
(1) https:120.125.80.50/GL/有程式 (不安全->繼續)
(2) 點 ToDraw(右下角) 可以在左邊黑色框框畫畫,Ctrl-R 可以清空
(3-1)畫個身體 : myDrawObject(0)
(3-2)畫個手臂 : myDrawObject(1)
(3-3)改程式碼的順序:
glPushMatrix();
glRotatef(angle,0,0,1);
myDrawObject(0)
myDrawObject(1)
glPopMatrix();
Translatef(0,0,0);
Translatef(0,0,0);
(3-4)按angle= 在按空白鍵 會自動改動畫,在按一次空白鍵可以暫停

###讓手臂轉動,身體不要動(公轉)
(4-1) 點一下 glRotatef() 那一行,變成紅色,便可以移動畫在右邊的手臂
(4-2) 程式順序:
glPushMatrix();
myDrawObject(0); ///畫身體
glRotatef(angle,0,0,1); ///旋轉Rotate下的整個東西
Translatef(0,0,0); ///往左下移(讓軸心 放在世界中心)
myDrawObject(1); ///畫手臂(右上方)
glPopMatrix();
Translatef(0,0,0);
###讓手臂轉動,身體不要動(自轉)
(5-1) 程式順序:
myDrawObject(0); ///畫身體
glPushMatrix();
Translatef(0.29, 0.31, 0); ///往右上方移動(將手臂掛到身體的右上方)....將手臂的軸心移到左下角
glRotatef(angle,0,0,1); ///旋轉Rotate下的整個東西
Translatef(-0.3, -0.19, 0); ///往左下移(讓軸心 放在世界中心(0,0))....
myDrawObject(1); ///畫手臂(右上方)
glPopMatrix();
------->移動圖的順序: 1. 先將手臂移動到(0, 0) [手臂原本畫在右上,往左下移動到中心]
2. 在旋轉手臂的角度
3. 再將手臂移動到想放的地方 [ex: 手臂原本的地方(右上方)]
3. 寫程式week12_TRT(剪貼今天、之前的筆記)
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0, 0, 1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle+=1;
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week12 TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}






沒有留言:
張貼留言