2024年5月6日 星期一

SY-BlingBangBang電腦圖學🎬-Week12

 1. 

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

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

    step3: 點進 freeglut 👉 lib 資料夾

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

    step5: 安裝 OpenCV 要勾 Add PATH (第二個),裝在預設目錄

              👉 Setting-Compiler 裡,要把 OpenCV 的三個設定設好

                  👇 

                  (1) 重開 CodeBlocks

                       👇 原本的檔案在 View 👉 Start Page

                  (2) 在 Search directories 加入2個目錄

                        1-1 Compiler 👉 C:\OpenCV2.1\include

                        1-2 Linker 👉 C:\OpenCV2.1\lib

                  (3) 在 Linker setting 裡,加入 👉 cv210

                                                            👉 cxcore210

                                                            👉 highgui210

    step6: 把上週 week11 的程式碼拿下來

    step7: 複製 week11-3_obj_gundam_hand1_hand2 到桌面

    step8: 改目錄名 week12-1_obj_gundam_hand1_hand2

    step9: 把 .cbp,改檔名 week12-1_obj_gundam_hand1_hand2.cbp

    step10: 再用 CodeBlocks 的 File-Open 開啟剛剛的 .cbp 檔

    step11: 在專案名稱上按右鍵,選最下面的 Properties,進去改檔名

    step12: 存檔 File-Save project





    step13: 修改程式碼

                👉void display()

                    {

                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                        glutSolidSphere( 0.1, 30, 30);

                        glutWireCube(0.6);

                        glPushMatrix();

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

                            glTranslatef(-0.3, 0.3, 0); ///掛到肩上

                            glRotatef(angle++, 0, 0, 1); ///轉動

                            glTranslatef(0, -0.3, 0); ///把旋轉中心,放正中心

                            drawhand1(); ///glutSolidTeapot( 0.3 );

                        glPopMatrix();

                        glPushMatrix();

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

                            glTranslatef(0.3, 0.3, 0); ///掛到肩上

                            glRotatef(angle++, 0, 0, 1); ///轉動

                            glTranslatef(0, -0.3, 0); ///把旋轉中心,放正中心

                            drawhand2(); ///glutSolidTeapot( 0.3 );

                        glPopMatrix();

                        glutSwapBuffers();

                    }




2.

    step1: 複製 week12-1_obj_gundam_hand1_hand2

    step2: 改目錄名 week12-2_obj_gundam_upper_lower_hand

    step3: 把 .cbp,改檔名 week12-2_obj_gundam_upper_lower_hand.cbp

    step4: 再用 CodeBlocks 的 File-Open 開啟剛剛的 .cbp 檔

    step5: 在專案名稱上按右鍵,選最下面的 Properties,進去改檔名

    step6: 存檔 File-Save project

    step7: 修改程式碼,多宣告兩個指標 👇

              GLMmodel * upper = NULL;

              GLMmodel * lower = NULL;

    step8: 再把 drawmodel() 複製兩份,drawUpper(){...}、drawLower(){...}

    step9: 裡面的 pmodel 都改成 upper、lower


    step10: 利用 Maya 登入,File-Import-hand1.obj

    step11: 裁切成上、下手臂,各自存成 upper.obj、lower.obj

    step12: 修改程式碼 👇

                void display()

                {

                    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                    ///glutSolidSphere( 0.1, 30, 30);

                    ///glutWireCube(0.6);


                    glPushMatrix();

                        drawUpper();

                        glPushMatrix();

                            glTranslatef(0, -0.01, 0); ///掛到肩上

                            glRotatef(angle++, 1, 0, 0); ///轉動

                            glTranslatef(-0.02, -0.2, 0); ///把旋轉中心,放正中心

                            drawLower(); ///glutSolidTeapot( 0.3 );

                        glPopMatrix();

                    glPopMatrix();

                    glutSwapBuffers();

            }



3.

    step1: 複製 week12-2_obj_gundam_hand1_hand2

    step2: 改目錄名 week12-3_obj_gundam_body_upper_lower

    step3: 把 .cbp,改檔名 week12-3_obj_gundam_body_upper_lower.cbp

    step4: 再用 CodeBlocks 的 File-Open 開啟剛剛的 .cbp 檔

    step5: 在專案名稱上按右鍵,選最下面的 Properties,進去改檔名

    step6: 存檔 File-Save project

    step7: 利用 Maya ,切出身體

    step8: 補上程式碼 👇

              GLMmodel * body = NULL;

    step9: 再把 void drawBody() 複製出來,改用 body.obj 和 body body body

    step10: 修改程式碼 👇

                       void display()

                {

                    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                    ///glutSolidSphere( 0.1, 30, 30);

                    ///glutWireCube(0.6);

                    glPushMatrix();

                        glRotatef(180, 0, 1, 0);

                        drawBody();

                        glPushMatrix();

                            glTranslatef(-0.15, 0, 0);

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

                            glTranslatef(-0.025, -0.05, 0);

                            drawUpper();

                            glPushMatrix();

                                glTranslatef(0, -0.1, 0); ///掛到肩上

                                ///glRotatef(angle++, 1, 0, 0); ///轉動

                                glTranslatef(-0.02, -0.2, 0); ///把旋轉中心,放正中心

                                drawLower(); 

                            glPopMatrix();

                        glPopMatrix();

                    glPopMatrix();

                    glutSwapBuffers();

                }




    step11: 修改程式碼,控制旋轉大小(舉手)




4.

    step1: 複製 week12-3_obj_gundam_hand1_hand2

    step2: 改目錄名 week12-4_keyboard_angleID_mouse_motion_angle

    step3: 把 .cbp,改檔名 week12-4_keyboard_angleID_mouse_motion_angle.cbp

    step4: 再用 CodeBlocks 的 File-Open 開啟剛剛的 .cbp 檔

    step5: 在專案名稱上按右鍵,選最下面的 Properties,進去改檔名

    step6: 存檔 File-Save project

    step7: 修改程式碼,利用滑鼠、鍵盤控制 👇

              (1)void keyboard(unsigned char key, int x, int y){

                    if(key=='0') angleID = 0;

                    if(key=='1') angleID = 1;

                    if(key=='2') angleID = 2;

                    if(key=='3') angleID = 3;

                }

              (2)void motion(int x, int y){

                    angle[angleID] = y;

                    glutPostRedisplay();

                 }

              (3)main() 裡,加入 👉 glutKeyboardFunc(keyboard);

                                          👉 glutMotionFunc(motion);

              (4)前面的 float angle=0 改成用陣列來做事 👉 float angle[20];

                                                                        👉 int angleID = 0;

              (5)display 裡,改成 angle[0]、angle[1]






沒有留言:

張貼留言