2024年4月22日 星期一

SY-BlingBangBang電腦圖學🎬-Week10

 1. 先做1、2週的基本程式

    step1: 下載 freeglut-MinGW-3.0.0-1.mp.zip 

    step2: 進到資料夾,把檔案 freeglut 拉到桌面

    step3: 點進 freeglut 👉 lib 資料夾

    step4: 複製 libfreeglut.a 並且改名為libglut32.a

    step5: 開啟code blocks

    step6: 開新專案,專案名稱: week10-0_sample

2. 

    step1: 開新專案,專案名稱: week10-1_TRT_glutSolidCube_myBody_myArm

    step2: 貼上 week09-2 的程式碼

    step3: 第一次修改程式碼

              👉 要用 glutSolidCube(0.3) 用兩次,紅色的身體,綠色的手臂

              目標 👉 用方塊,組出今天的程式

    step4: 第二次修改程式碼

              👉 把身體的程式,放到 void myBody() 函式

              👉 把手臂的程式,放到 void myArm() 函式

3.

    step1: 開新專案,專案名稱: week10-2_TRT_glutIdleFunc_rotate

    step2: 貼上 week10-1 的程式碼

    step3: 加上程式碼

              display前 👉 float angle=0;

              display 👉 glRotatef(angle++, 0, 0, 1);

              main 👉 glutIdleFunc(display);




4.

    step1: 開新專案,專案名稱: week10-3_TRT_glRotate_glTranslatef

    step2: 貼上 week10-2 的程式碼

    step3: 修改程式碼

              display 第二個 glPushMatrix(); 👉 glTranslatef(0.225,  0, 0); 

                                                               //移動旋轉中心




5.

    step1: 開新專案,專案名稱: week10-4_TRT_glTranslatef_glRotate_glTranslatef

    step2: 貼上 week10-3 的程式碼

    step3: 修改程式碼

              方塊實心改空心,身體改大 👉 glutWireCube( 0.6 );

                                                 👉 glutWireCube( 0.3 );

              註解  myBody(); 前的移動位置 👉 ///glTranslatef(-0.6, +0.3, 0);




    step4: 把手臂掛到肩膀上

              解開 display 第二個 glPushMatrix(); 註解 👉 glTranslatef(+0.3, +0.3, 0);




6. 全部重做一次

    step1: 按右鍵專案名稱,選 Activate project

    

    step2: 到 10-1、10-2 檔案,把實心變空心,移動位置註解

              修改 👉 glutWireCube( 0.6 ); ///身體方塊

                     👉 glutWireCube( 0.3 ); ///手臂方塊

              註解 👉 ///glTranslatef(-0.6, +0.3, 0);

                     👉 ///glTranslatef(+0.0, +0.3, 0);



7. 

    step1: 開新專案,專案名稱: week10-5_two_layers

    step2: 貼上 week10-4 的程式碼

    step3: 修改程式碼

               void myArm()

               {

                    glPushMatrix(); ///上保護

                        glColor3f(0, 1, 0); ///綠色的手臂

                        glScalef(1.5, 0.5, 0.5); ///寬變1.5,高度變0.5倍

                        glutWireCube( 0.3 ); ///方塊

                    glPopMatrix();

               }

               float angle=0;

               void display()

               {

                    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                    glPushMatrix();

                        ///glTranslatef(-0.6, +0.3, 0);

                        myBody();

                    glPopMatrix();

                    glPushMatrix();

                        glTranslatef(+0.3, +0.3, 0);

                        glRotatef(angle++, 0, 0, 1);

                        glTranslatef(0.225,  0, 0);

                        myArm();

                        glPushMatrix();

                            glTranslatef(0.225, 0, 0);

                            glRotatef(angle++, 0, 0, 1);

                            glTranslatef(0.225,  0, 0);

                            myArm();

                        glPopMatrix();

                    glPopMatrix();

               glutSwapBuffers();

               }





8.

    step1: 開新專案,專案名稱: week10-6_TRT_left_right

    step2: 貼上 week10-5 的程式碼

    step3: 複製右半邊的手臂程式碼,修改程式碼,變左手邊

              display 👉 ///右半邊

                            glPushMatrix();

                                glTranslatef(+0.3, +0.3, 0);

                                glRotatef(angle++, 0, 0, 1);

                                glTranslatef(0.225,  0, 0);

                                myArm();

                                glPushMatrix();

                                    glTranslatef(0.225, 0, 0);

                                    glRotatef(angle++, 0, 0, 1);

                                    glTranslatef(0.225,  0, 0);

                                    myArm();

                                glPopMatrix();

                            glPopMatrix();


                            ///左半邊(複製右邊的)

                            glPushMatrix();

                                glTranslatef(-0.3, +0.3, 0);

                                glRotatef(angle++, 0, 0, 1);

                                glTranslatef(-0.225,  0, 0);

                                myArm();

                                glPushMatrix();

                                    glTranslatef(-0.225, 0, 0);

                                    glRotatef(angle++, 0, 0, 1);

                                    glTranslatef(-0.225,  0, 0);

                                    myArm();

                                glPopMatrix();

                            glPopMatrix();




9.

    step1: 開新專案,專案名稱: week10-7_TRT_mouse_motion_angle

    step2: 貼上 week10-6 的程式碼

    step3: 修改、增加程式碼

              main 👉 glutMotionFunc(motion);

              motion 👉 void motion(int x, int y)

                              {

                                    angle = x;

                                    glutPostRedisplay(); ///重畫畫面

                              }

              display 👉 angle++ 都改回 angle,左手邊的改 -angle








沒有留言:

張貼留言