2023年3月15日 星期三

Code Talker week05 類機械手臂

 STEP01

1.去jsyeh.org/3dcg10下載data跟win32,並解壓縮,把data資料夾丟進win32

2.以藍色車子為範例,理解程式碼從上往下讀,最底下藍色車子,上面一行長胖的,再上面一行轉動,最上面一行移動至右邊


3.把移動和旋轉按右鍵對調,並再進行一次從下往上讀,下面兩行沒有變動,一樣是藍色車子長胖的,上面一行移動至右邊,最上面一行為整個轉動



STEP02

1.開啟一個新專案

2.到github複製上周week04-1的程式碼,貼到新專案上

3.將旋轉軸改為Z軸,範例參考:glRotatef(angle,0,0,1);並執行看茶壺

4.再增加一個茶壺,並將它的glRotatef和glTranslatef對調,分別為兩個茶壺上不同顏色,以利觀察


STEP03

1.執行老師寫的P語言檔案,畫個東西和手臂,按空白鍵想要讓他的手臂轉動,但轉得很怪


2.把手轉的中心放去中心,然後用另一個移動把手臂接上



STEP04

1.開新專案,複製05-1的程式碼,改造成兩個方塊並拿掉旋轉

2.第2個方塊移到想放的地方,參考範例:右上角

3.給第2個方塊加上轉動,得到一個奇怪的旋轉

4.在旋轉程式碼底下加上glTranslatef(0.25,0.25,0);使旋轉中心移至中心

5.在轉動的前面也加上glTranslatef(0.25,0.25,0);使整個東西放到右上角


最終程式碼狀態:

#include <GL/glut.h>

float angle = 0;

 void display()

 {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glColor3f(1,1,0);//上色

    glPushMatrix();

        //glTranslatef(0.8,0,0);

        //glRotatef(angle,0,0,1);//改Z軸旋轉

        glutSolidCube(0.5);

    glPopMatrix();

    glPushMatrix();

        glTranslatef(0.25,0.25,0);//把東西掛到右上角

        glRotatef(angle,0,0,1);//轉到

        glTranslatef(0.25,0.25,0);//移到中心

        glColor3f(0,1,1);//上色

        glutSolidCube(0.5);

    glPopMatrix();

    glutSwapBuffers();

    angle++;

 }

 int main(int argc, char *argv[])//main()主函式 進階版

 {

    glutInit(&argc,argv);//把參數送給glutInit初始化

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);//雙緩衝區+3D深度功能

    glutCreateWindow("week05");//開GLUT視窗


    glutDisplayFunc(display);//顯示用的函式

    glutIdleFunc(display);


    glutMainLoop();

 }



沒有留言:

張貼留言