(1)
首先,跟之前好幾次的一開始大同小異,先下載3個檔案,解壓縮放進window後,開啟Transformation,便會看到兩個立體車的圖。
(2)
程式從下面Begin開始看,越上面的程式則影響下面的所有程式,所以我們如果將1.2行的程式交換,結果必定不同。
實際使用程式碼來說明:
在老師一步步地更改程式碼講解下,很直接了當的了解每一行的內容,以及交換和註解後的不同,也清楚了自轉和公轉的概念,其實所需要改動的也只有幾行。
glPushMatrix();
glRotated(a,0,0,1); ///轉動
glTranslated(-2.4,1.2,-6);
///glRotated(60,1,0,0);
glRotated(a,0,0,1); ///轉動
///glTranslatef(0, 0, -6); ///先把樓上註解移到Z=-6
glutSolidSphere(1,slices,stacks);
glPopMatrix();
///把其他都變白色
glColor3f(1,1,1);
(以上是最終版的程式碼)
(5)
所以我們將茶壺的把手位置,移至中心點,這樣就可以明確的做出倒茶的樣子。
再來,我們將茶嘴的部分,與另一個茶壺連接,並且一起轉動,之後更連接了3.4.5...個茶壺,
可以用不同座標正負位置的方式,讓他們的轉動角度有所不同,因此模擬出機械手臂的轉動方式。
#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");
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);///Now:
glutMainLoop();
}
glutMotionFunc(motion);///Now:
glutMainLoop();
}
以上是老師在fb所提供的程式碼
----------------------------------------------------------------------------------------------------------------------------------
我覺得在我不在的這兩天,好像教了很多更困難的東西,還好有老師的上課影片,讓我可以一步一步的惡補,並且寫出豐富的部落格,從一開始只是倒茶的茶壺,到現在竟然可以做出機械手臂轉動的方式,讓人覺得十分新奇且有趣!


沒有留言:
張貼留言