2017年5月2日 星期二

Week11 王婉懿的上課筆記

  • 作業一 : 載入模型

  •          步驟 一 : 下載軟體"3D Exploration v1.81"。
                 連結 : http://www.freespacemods.net/e107_plugins/download/download.php?view.129

     
             步驟 二 : 軟體"3D Exploration v1.81"解壓縮。

     

               步驟三 : 打開新網址「jsyeh.org/3dcg10」,將data檔案下載在桌面上。
               連結 : http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
     
               
     
              步驟四 : 將剛下載的window解壓縮。
     
             步驟五 : 打開"3D Exploration ",從剛剛下載的data,載入足球模型。
     
              步驟六 : 另存足球模型為 cpp 檔。

     
               步驟七 : 另存設為"sample APP"。


     
              步驟八 : 建Open GL專案。

              步驟九 : 專案類型選擇OpenGL Project

              步驟十 : 出現畫面上的視窗,點選 next

              步驟十一 : 專案名稱打上「學號_hw2_opengl」,儲存目的選擇不用更改,點選 Next

             步驟十二 : 點選 Finish
             步驟十三 : 開始執行程式

     

              步驟十四 : 足球模型CPP檔移入專案。


     
               步驟十五 : 執行足球模型。
     
     
  • 作業二 : 組合機器人

  •          步驟一 : 分別匯入三隻海豚。
     
     
             步驟二 : 三隻海豚移入myGLMsample資料夾中的data。
     
             步驟三 : 從專案打開myGLMsample。
     
              步驟四 : 下載" freeglut "。
     
     
               步驟五 : 打開freeglut拖曳檔案到桌面,千萬不要直接解壓縮 !
     
               步驟六 : 改程式碼,讓三隻海豚合體。
                    程式碼 :
                    #include <string.h>
                    #include <stdlib.h>
                    #include <GL/glut.h>
                    #include "glm.h"
                    GLMmodel* pmodel = NULL;
                    GLMmodel* pmodel2 = NULL;
                    GLMmodel* pmodel3 = NULL;

                    float angle=0;
                    void display()
                    {              
                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                        glPushMatrix();
                            angle++;
                            glRotatef(angle, 0,1,0);
                            if (!pmodel) {
                            pmodel = glmReadOBJ("data/dolphins1.obj");
                            if (!pmodel) exit(0);
                            glmUnitize(pmodel);
                            glmFacetNormals(pmodel);
                            glmVertexNormals(pmodel, 90.0);
                            }
                            glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
                            if (!pmodel2) {
                            pmodel2 = glmReadOBJ("data/dolphins2.obj");
                            if (!pmodel2) exit(0);
                            glmUnitize(pmodel2);
                            glmFacetNormals(pmodel2);
                            glmVertexNormals(pmodel2, 90.0);
                            }

                            glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
                            if (!pmodel3) {
                            pmodel3 = glmReadOBJ("data/dolphins3.obj");
                            if (!pmodel3) exit(0);
                            glmUnitize(pmodel3);
                            glmFacetNormals(pmodel3);
                            glmVertexNormals(pmodel3, 90.0);
                            }

                            glmDraw(pmodel3, GLM_SMOOTH | GLM_MATERIAL);
                        glPopMatrix();
                        glutSwapBuffers();
                    }
                    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
                    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat high_shininess[] = { 100.0f };
                    int main(int argc, char**argv)
                    {
                        glutInit(&argc, argv);
                        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
                        glutCreateWindow("Yes, 3D Model Here");
                        glutDisplayFunc(display);
                        glutIdleFunc(display);
                        glClearColor(1,1,1,1);
                         //glEnable(GL_CULL_FACE);
                        //glCullFace(GL_BACK);

                        glEnable(GL_DEPTH_TEST);
                        glDepthFunc(GL_LESS);
                        glEnable(GL_LIGHT0);
                        glEnable(GL_NORMALIZE);
                        glEnable(GL_COLOR_MATERIAL);
                        glEnable(GL_LIGHTING);
                        glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
                        glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
                        glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
                        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
                        glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
                        glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
                        glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
                        glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
                        glutMainLoop();
                    }
     

     
  • 作業三 : 移動機器人

  •          步驟一 : 繼續修改程式碼,讓海豚呈現出類似機器人的關節位置。
                    程式碼 :
                    #include <string.h>
                    #include <stdlib.h>
                    #include <GL/glut.h>
                    #include "glm.h"
                    GLMmodel* pmodel = NULL;
                    GLMmodel* pmodel2 = NULL;
                    GLMmodel* pmodel3 = NULL;

                    float angle=0;
                    void display()
                    {              
                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                        glPushMatrix();
                            angle++;
                            glRotatef(angle, 0,1,0);
                            if (!pmodel) {
                            pmodel = glmReadOBJ("data/dolphins1.obj");
                            if (!pmodel) exit(0);
                            glmUnitize(pmodel);
                            glmFacetNormals(pmodel);
                            glmVertexNormals(pmodel, 90.0);
                            }
                 
                            if (!pmodel2) {
                            pmodel2 = glmReadOBJ("data/dolphins2.obj");
                            if (!pmodel2) exit(0);
                            glmUnitize(pmodel2);
                            glmFacetNormals(pmodel2);
                            glmVertexNormals(pmodel2, 90.0);
                            }

                         
                            if (!pmodel3) {
                            pmodel3 = glmReadOBJ("data/dolphins3.obj");
                            if (!pmodel3) exit(0);
                            glmUnitize(pmodel3);
                            glmFacetNormals(pmodel3);
                            glmVertexNormals(pmodel3, 90.0);
                            }

                            glPushMatrix();
                                  glTranslatef(0,0,0);
                                  glRotatef(90,0,1,0);
                                  glScalef(0.8,0.8,0.8);
                                  glmDraw(pmodel, GLM_SMOOTH | GLM_MATERIAL);
                             glPopMatrix();
                            glPushMatrix();
                                  glTranslatef(-0.5,0,0);
                                  glScalef(0.4,0.4,0.4);
                                  glmDraw(pmodel2, GLM_SMOOTH | GLM_MATERIAL);
                            glPopMatrix();
                            glPushMatrix();
                                  glTranslatef(0.5,0,0);
                                  glScalef(0.4,0.4,0.4);
                                  glmDraw(pmodel3, GLM_SMOOTH | GLM_MATERIAL);
                            glPopMatrix();


                        glPopMatrix();
                        glutSwapBuffers();
                    }
                    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };
                    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                    const GLfloat high_shininess[] = { 100.0f };
                    int main(int argc, char**argv)
                    {
                        glutInit(&argc, argv);
                        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);
                        glutCreateWindow("Yes, 3D Model Here");
                        glutDisplayFunc(display);
                        glutIdleFunc(display);
                        glClearColor(1,1,1,1);
                         //glEnable(GL_CULL_FACE);
                        //glCullFace(GL_BACK);

                        glEnable(GL_DEPTH_TEST);
                        glDepthFunc(GL_LESS);
                        glEnable(GL_LIGHT0);
                        glEnable(GL_NORMALIZE);
                        glEnable(GL_COLOR_MATERIAL);
                        glEnable(GL_LIGHTING);
                        glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
                        glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
                        glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
                        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
                        glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
                        glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
                        glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
                        glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
                        glutMainLoop();
                    }


  • 作業四 : 下載3D模型

  •          步驟一 : 上網找" 3D modle free"。

             步驟二 :下載模型。

             步驟三 : 將下載的模型移入data中,能用 "3D Exploration "打開檔案。

    沒有留言:

    張貼留言