2020年5月20日 星期三

Week13 - 07161045

複習CodeBlocks專案

  • 先開啟GLUT專案檔
  • 打開CodeBlocks -> Settings -> Environment -> 打開Check Ans Set File Assosiation後面的Manage按Apply
     


     

     

複習專案目錄
  • 打開專案目錄,找到.cbp檔,用NotePad++開啟,並將兩個地方更改為"."
  • 回到CodeBlocks後便可繼續執行
     

     

     

複習聲音
  • 新增一行程式碼
     

複習模型
  • 將Source裡的glm.c及glm.h拉到專案目錄裡,並改名為glm.cpp
  • 再從Data中拉模型到目錄裡

     

     
  • 將glm.cpp新增至CodeBlocks裡
     
  • 最後執行後跑出模型
     

複習T-R-T
  • 新增一個關節
  • 程式碼如下:
    #include <GL/glut.h>
      #include "glm.h" ///我們需要 glm 來幫忙秀3D模型
        GLMmodel * model=NULL;///我們需要 glm 來幫忙秀3D模型
          GLMmodel * model2=NULL;///另一個模型
            ///留下打光的部分 (陣列)
              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 };
                                                   ///光的位置,z調正負
                        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 };

                                  void drawBody()///移出來變函式
                                    {
                                          if(model==NULL){///我們需要 glm 來幫忙秀3D模型
                                                model = glmReadOBJ("Al.obj");///讀入3D模型,在執行目錄中
                                                  glmUnitize(model);///....還缺一些...
                                                    glmFacetNormals(model);///重算(面)法向量
                                                      glmVertexNormals(model, 90);///重算(頂點vn)法向量
                                                    }
                                                      glPushMatrix();
                                                            glScalef(0.8, 0.8, 0.8);///希望它小一點
                                                              glRotatef(180, 0,1,0);///對Y軸轉180度
                                                                glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
                                                              glPopMatrix();
                                                            }
                                                              void drawArm()///另一個模型
                                                                {
                                                                      if(model2==NULL){
                                                                            model2 = glmReadOBJ("porsche.obj");
                                                                              glmUnitize(model2);///大太了,縮小
                                                                            }
                                                                              glPushMatrix();
                                                                                    glScalef(0.2, 0.2, 0.2);///變小一點
                                                                                      glRotatef(90, 0,1,0);///轉側面
                                                                                        glmDraw(model2,  GLM_SMOOTH | GLM_MATERIAL);
                                                                                      glPopMatrix();
                                                                                    }
                                                                                      float angle=0;
                                                                                        void display()
                                                                                          {
                                                                                                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                  drawBody();///移出來變函式
                                                                                                    glPushMatrix();
                                                                                                          glTranslatef(0.3, 0.3, 0);///(3)等一下要掛在哪裡
                                                                                                            glRotatef(angle, 0,0,1);///(1) 有個轉動
                                                                                                              glTranslatef(0.2, 0, 0);///(2) 移動轉動的中心
                                                                                                                drawArm();///新讀入的模型
                                                                                                              glPopMatrix();
                                                                                                                glutSwapBuffers();
                                                                                                              }
                                                                                                                void motion(int x, int y)
                                                                                                                  {
                                                                                                                        angle = x;
                                                                                                                          glutPostRedisplay();
                                                                                                                        }
                                                                                                                          int main(int argc, char *argv[])
                                                                                                                            {
                                                                                                                                  glutInit(&argc, argv);
                                                                                                                                    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

                                                                                                                                        glutCreateWindow("Week13");

                                                                                                                                            glutDisplayFunc(display);
                                                                                                                                              glutMotionFunc(motion);

                                                                                                                                                  ///留下下面的打光相關的函式....
                                                                                                                                                    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 <GL/glut.h>
                                                                                                                                                                                        #include "glm.h" ///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                          GLMmodel * model=NULL;///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                            GLMmodel * model2=NULL;///另一個模型
                                                                                                                                                                                              ///留下打光的部分 (陣列)
                                                                                                                                                                                                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 };
                                                                                                                                                                                                                                     ///光的位置,z調正負
                                                                                                                                                                                                          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 };

                                                                                                                                                                                                                    void drawBody()///移出來變函式
                                                                                                                                                                                                                      {
                                                                                                                                                                                                                            if(model==NULL){///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                                                                  model = glmReadOBJ("Al.obj");///讀入3D模型,在執行目錄中
                                                                                                                                                                                                                                    glmUnitize(model);
                                                                                                                                                                                                                                      glmFacetNormals(model);///重算(面)法向量
                                                                                                                                                                                                                                        glmVertexNormals(model, 90);///重算(頂點vn)法向量
                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                        glPushMatrix();
                                                                                                                                                                                                                                              glScalef(0.8, 0.8, 0.8);///希望它小一點
                                                                                                                                                                                                                                                glRotatef(180, 0,1,0);///對Y軸轉180度
                                                                                                                                                                                                                                                  glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
                                                                                                                                                                                                                                                glPopMatrix();
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                void drawArm()///另一個模型
                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                        if(model2==NULL){///
                                                                                                                                                                                                                                                              model2 = glmReadOBJ("porsche.obj");
                                                                                                                                                                                                                                                                glmUnitize(model2);///大太了,縮小
                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                glPushMatrix();
                                                                                                                                                                                                                                                                      glScalef(0.2, 0.2, 0.2);///變小一點
                                                                                                                                                                                                                                                                        glRotatef(90, 0,1,0);/// 轉側面
                                                                                                                                                                                                                                                                          glmDraw(model2,  GLM_SMOOTH | GLM_MATERIAL);
                                                                                                                                                                                                                                                                        glPopMatrix();
                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                        float angle=0;
                                                                                                                                                                                                                                                                          void display()
                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                                                                                                    drawBody();///TODO5: 移出來變函式

                                                                                                                                                                                                                                                                                        glPushMatrix();/// 右 手臂
                                                                                                                                                                                                                                                                                              glTranslatef(0.3, 0.3, 0);///(3)等一下要掛在哪裡
                                                                                                                                                                                                                                                                                                glRotatef(angle, 0,0,1);///(1) 有個轉動
                                                                                                                                                                                                                                                                                                  glTranslatef(0.2, 0, 0);///(2) 移動轉動的中心
                                                                                                                                                                                                                                                                                                    drawArm();///右上 手臂
                                                                                                                                                                                                                                                                                                      glPushMatrix();
                                                                                                                                                                                                                                                                                                            glTranslatef(0.2,0,0);
                                                                                                                                                                                                                                                                                                              glRotatef(angle, 0,0,1);
                                                                                                                                                                                                                                                                                                                glTranslatef(0.2, 0, 0);
                                                                                                                                                                                                                                                                                                                  drawArm();///右下手臂
                                                                                                                                                                                                                                                                                                                glPopMatrix();
                                                                                                                                                                                                                                                                                                              glPopMatrix();

                                                                                                                                                                                                                                                                                                                  glPushMatrix();/// 左 手臂
                                                                                                                                                                                                                                                                                                                        glTranslatef(-0.3, 0.3, 0);///(3)等一下要掛在哪裡
                                                                                                                                                                                                                                                                                                                          glRotatef(angle, 0,0,1);///(1) 有個轉動
                                                                                                                                                                                                                                                                                                                            glTranslatef(-0.2, 0, 0);///(2) 移動轉動的中心
                                                                                                                                                                                                                                                                                                                              drawArm();///左上 手臂
                                                                                                                                                                                                                                                                                                                                glPushMatrix();
                                                                                                                                                                                                                                                                                                                                      glTranslatef(-0.2,0,0);
                                                                                                                                                                                                                                                                                                                                        glRotatef(angle, 0,0,1);
                                                                                                                                                                                                                                                                                                                                          glTranslatef(-0.2, 0, 0);
                                                                                                                                                                                                                                                                                                                                            drawArm();///左下手臂
                                                                                                                                                                                                                                                                                                                                          glPopMatrix();
                                                                                                                                                                                                                                                                                                                                        glPopMatrix();


                                                                                                                                                                                                                                                                                                                                              glutSwapBuffers();
                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                              void motion(int x, int y)
                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                      angle = x;
                                                                                                                                                                                                                                                                                                                                                        glutPostRedisplay();
                                                                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                                                                        int main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                                                                                                  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

                                                                                                                                                                                                                                                                                                                                                                      glutCreateWindow("Week13");

                                                                                                                                                                                                                                                                                                                                                                          glutDisplayFunc(display);
                                                                                                                                                                                                                                                                                                                                                                            glutMotionFunc(motion);

                                                                                                                                                                                                                                                                                                                                                                                ///留下下面的打光相關的函式....
                                                                                                                                                                                                                                                                                                                                                                                  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 <GL/glut.h>
                                                                                                                                                                                                                                                                                                                                                                                                                    #include "glm.h" ///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                                                                                                                                                                                                                                                      GLMmodel * model=NULL;///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                                                                                                                                                                                                                                                        GLMmodel * model2=NULL;///另一個模型
                                                                                                                                                                                                                                                                                                                                                                                                                          ///留下打光的部分 (陣列)
                                                                                                                                                                                                                                                                                                                                                                                                                            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 };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ///光的位置,z調正負
                                                                                                                                                                                                                                                                                                                                                                                                                                      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 };

                                                                                                                                                                                                                                                                                                                                                                                                                                                void drawBody()///移出來變函式
                                                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                                                        if(model==NULL){///我們需要 glm 來幫忙秀3D模型
                                                                                                                                                                                                                                                                                                                                                                                                                                                              model = glmReadOBJ("Al.obj");///讀入3D模型,在執行目錄中
                                                                                                                                                                                                                                                                                                                                                                                                                                                                glmUnitize(model);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  glmFacetNormals(model);///重算(面)法向量
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glmVertexNormals(model, 90);///重算(頂點vn)法向量
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glPushMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          glScalef(0.8, 0.8, 0.8);///希望它小一點
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glRotatef(180, 0,1,0);///對Y軸轉180度
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glmDraw(model, GLM_SMOOTH | GLM_MATERIAL);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glPopMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            void drawArm()///另一個模型
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    if(model2==NULL){
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          model2 = glmReadOBJ("porsche.obj");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glmUnitize(model2);///大太了,縮小
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glPushMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  glScalef(0.2, 0.2, 0.2);///變小一點
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glRotatef(90, 0,1,0);///轉一下 側面
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glmDraw(model2,  GLM_SMOOTH | GLM_MATERIAL);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glPopMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    float angle[4]={0,0,0,0};///變成很多個陣列!!!
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      int angleID=0;///現在在動的,是哪一個關節呢?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        void display()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  drawBody();///移出來變函式

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glPushMatrix();/// 右 手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glTranslatef(0.3, 0.3, 0);///(3)等一下要掛在哪裡
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glRotatef(angle[0], 0,0,1);/// (1) 有個轉動
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                glTranslatef(0.2, 0, 0);///(2) 移動轉動的中心
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  drawArm();///右上 手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glPushMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          glTranslatef(0.2,0,0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glRotatef(angle[1], 0,0,1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glTranslatef(0.2, 0, 0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                drawArm();///右下手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glPopMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glPopMatrix();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                glPushMatrix();/// 左 手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glTranslatef(-0.3, 0.3, 0);///(3)等一下要掛在哪裡
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        glRotatef(angle[2], 0,0,1);///(1) 有個轉動
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          glTranslatef(-0.2, 0, 0);///(2) 移動轉動的中心
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            drawArm();///左上 手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glPushMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glTranslatef(-0.2,0,0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glRotatef(angle[3], 0,0,1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        glTranslatef(-0.2, 0, 0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          drawArm();///左下手臂
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        glPopMatrix();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glPopMatrix();


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            glutSwapBuffers();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            int oldX, oldY;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              void mouse(int button, int state, int x, int y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      oldX=x; oldY=y;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      void motion(int x, int y)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              angle[angleID] += (x-oldX);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                oldX = x;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  glutPostRedisplay();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  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;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                int main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              glutCreateWindow("Week13");

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  glutDisplayFunc(display);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    glutMotionFunc(motion);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      glutMouseFunc(mouse);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        glutKeyboardFunc(keyboard);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ///留下下面的打光相關的函式....
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              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();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                沒有留言:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                張貼留言