- 範例
2. 開啟Transformation檔案
3. 其中,按右鍵(或按S)可選擇 Swap translate 及 rotate
4.
glTranslatef(0.5, 0.0, 0.0);
glRotatef(angle, 0, 1, 0);
藍色的車子向右移動並旋轉,看起來像陀螺一樣(隨中心點自轉)
藍色車車先旋轉以後(綠色框框),再將其移動到右邊(紅色)
5.
交換了以後
glRotatef(angle, 0, 1, 0);
glTranslatef(0815, 0.0, 0.0);
藍色的車子向右移動並旋轉,看起來像圍著中心點走(隨中心點公轉)
藍色車車先移動到右邊以後(綠色框框),再整個轉動(紅色)
- 老師程式碼範例
2. 選擇 OpenGL T-R-T函式: 對特定軸轉動練習
2-1 ToDraw先畫一個圖
2-2 將Object拖曳到Rotate下方才可使其轉動
2-3 點右上方angle並按空白鍵,讓物件開始轉動
2-4 點Translate在選物件即可移動位置
4. 將手拉至下面
4-1 其中綠色框框先將手移至中心點
4-2 藍色框框則是旋轉綠色框框
4-3 紅色框框則是再將至於中心點正在轉動的手(藍色框框)移回原位
4-4 如此一來就變成只對特定軸轉動了
- 程式碼實作 TRT
1. 先建立一個新專案
2. 將基本的十行程式先複製貼上
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12 TRT");
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle,0,0,1);///旋轉
glTranslatef(0.4,-0.07,0);///往右下移動(把手把移到中心)
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
angle+=0.01;
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12 TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}

- 程式碼實作 TRT_TRT
1. 白色大茶壺不會移動,因為沒有在Rotate裡。
然後紅色小茶壺先向右移動(把把手移到旋轉中心)再進行旋轉。
最後再把茶壺掛到白茶壺的壺嘴為至當作手臂
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,1);///白色的
glutSolidTeapot(0.3);///大茶壺
glPushMatrix();
glTranslatef(0,0,0);///把下面旋轉中的東西 掛在某處
glRotatef(angle,0,0,1);///旋轉
glTranslatef(0.4,-0.07,0);///向右移動(把手移置中心)
glColor3f(1,0,0);///紅色的
glutSolidTeapot(0.3);///小茶壺
glPopMatrix();
glutSwapBuffers();
angle+=0.01;
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12 TRT_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}
2. 再增加一個紅色小茶壺作為手肘。
向右移動(把把手移到旋轉中心)再進行旋轉
最後再把茶壺掛到紅茶壺的壺嘴為至當作手肘
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1); ///白色的
glutSolidTeapot(0.3);///大茶壺
glPushMatrix();
glTranslatef(0.3, 0, 0);///將下面旋轉中的東西 掛在某處
glRotatef(angle, 0, 0, 1);///旋轉
glTranslatef(0.2, 0, 0);///向右移動(把手移置中心)
glColor3f(1, 0, 0);///紅色的
glutSolidTeapot(0.2);///小茶壺
glPushMatrix();
glTranslatef(0.2, 0, 0);///將下面旋轉中的東西 掛在某處
glRotatef(angle, 0, 0, 1);///旋轉
glTranslatef(0.2, 0, 0);///向右移動(把手移置中心)
glColor3f(1, 0, 0);///紅色的
glutSolidTeapot(0.2);///小茶壺
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
angle+=0.01;
}
int main(int argc,char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week12 TRT_TRT");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}













沒有留言:
張貼留言