1. 使用下列三個檔案開啟Transformation.exe,方法可以參照前幾周。
2. 開啟程式之後,可以點擊右鍵切換功能,左邊的數字可以用滑鼠上下拉動調整數值
3. 利用程式觀察T-R-T轉動
先轉動,再把整個轉動的物體做移動,可以看做成是自轉
先把整個物體做移動,再做轉動,可以看做成是公轉
(2) 用GLUT了解T-R-T轉動
1. 使用codeblocks開啟GLUT專案,開始方式可以參照前幾周
2. 將左上角的球移動到畫面正中央,至於為什麼是(0,0,-6),是因為camera設定的關係,
所以要移動到-6才能看到圖形
3. 將畫面正中央的球向Z軸轉動,再向X軸轉動60度,接著把整個轉動的球移動到畫面
左上方,並且將其他的圖形變成沒有顏色,這種轉動屬於自轉
4. 將球做T-R轉動,先將球移動到左上角,再讓球做轉動,但是軸心不變,
可以看到球繞著中心點做轉動,這種轉動屬於公轉
5. 使用茶壺做T-R-T轉動
首先去FB社團複製老師打好的程式碼,也就是我們之前做過的轉動茶壺,
但是複製上去的程式碼很雜亂,因此我們需要排版,點擊codeblocks畫面右鍵
選取 Format use AStyle
code :
#include <GL/glut.h>
float angle=0;///Now: 讓茶壼自動轉動的角度
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Now:備份矩陣
glRotatef(angle, 0,0,1);///Now:轉動
glutSolidTeapot(0.3);
glPopMatrix();///Now:還原矩陣
glutSwapBuffers();
}
void motion(int x, int y)
{
angle=x;///Now: 改變角度
glutPostRedisplay();///Now: 請 重畫畫面
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 TRT");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
將茶壺的把手移動到畫面正中央,並且可以做轉動,如下圖所示
6. 茶壺T-R-T轉動
畫兩個茶壺,一個紅色一個橘色,紅色的保持原地不動,將橘色茶壺的把手移動到畫面中央,再接著做轉動,最後把整個橘色茶壺掛到紅色茶壺的前端上
(注意 : 看T-R-T轉動的程式碼的時候,由下往上看)
code :
#include <GL/glut.h>
float angle=0;///Now: 讓茶壼自動轉動的角度
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();///Now:備份矩陣
glColor3ub(255,0,0);///中間紅色的茶壺
glutSolidTeapot(0.3);
glTranslatef(0.45,0.15,0);///4.掛在紅色茶壺的前端
glRotatef(angle, 0,0,1);///3.轉動橘色茶壺
glTranslatef(0.45,-0.10,0);///2.把橘色茶壺的把手放到畫面中央
glColor3ub(255,127,39);///2.幫上橘色
glutSolidTeapot(0.3);///1.一個茶壺
glPopMatrix();///Now:還原矩陣
glutSwapBuffers();
}
void motion(int x, int y)
{
angle=x;///Now: 改變角度
glutPostRedisplay();///Now: 請 重畫畫面
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("Week05 TRT");
glutDisplayFunc(display);
glutMotionFunc(motion);///Now:
glutMainLoop();
}












沒有留言:
張貼留言