2018年4月14日 星期六

Week05_鄭昕恬

因為球隊比賽所以延誤了兩次的部落格,現在看著老師的影片逐字補上

(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)











接下來我們將以上所學,應用到之前的茶壺上,在此我們可以發現,茶壺的轉動是茶身在轉動,而不是把手。













所以我們將茶壺的把手位置,移至中心點,這樣就可以明確的做出倒茶的樣子。




 (6)





再來,我們將茶嘴的部分,與另一個茶壺連接,並且一起轉動,之後更連接了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");
glutDisplayFunc(display);
glutMotionFunc(motion);///Now:
glutMainLoop();
}


以上是老師在fb所提供的程式碼



----------------------------------------------------------------------------------------------------------------------------------
我覺得在我不在的這兩天,好像教了很多更困難的東西,還好有老師的上課影片,讓我可以一步一步的惡補,並且寫出豐富的部落格,從一開始只是倒茶的茶壺,到現在竟然可以做出機械手臂轉動的方式,讓人覺得十分新奇且有趣!

沒有留言:

張貼留言