2020年4月15日 星期三

Week08 - 07161045

複習期中考
  • 老師先幫同學們複習10個程式碼
  • 10個程式碼為截至目前所教過的各大類程式碼
  1. glPushMatrix();///備份矩陣
  2. glTranslatef(x,y,z);///移動
  3. glRotatef(angle,x,y,z);///轉動
  4. glScalef(x,y,z);///放大縮小
  5. glBegin(GL_POLYGON);///開始畫
  6. glColor3f(r,g,b);///顏色
  7. glTexCoord2f(tx,ty);///貼圖座標
  8. glNormal3f(nx,ny,nz);///法向量
  9. glVertex2f(x,y);///頂點 也可 glVertex3f(x,y,z);
  10. glEnd():///結束化
  11. glPopMatrix();///還原矩陣
Light

  • 利用"codeblocks"的"GLUT"來複製"light"的程式碼
  • "ctrl+f"來搜尋關鍵字"light"
const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
      const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
        const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


            const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
              const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                  const GLfloat high_shininess[] = { 100.0f };


                          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);
                                                • 先叫出一個茶壺
                                                     
                                                  #include <GL/glut.h>
                                                    void display()
                                                      {
                                                            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                              glutSolidTeapot( 0.3 );
                                                                glutSwapBuffers();
                                                              }


                                                                  int main(int argc, char**argv)
                                                                    {
                                                                          glutInit(&argc, argv);
                                                                            glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                              glutCreateWindow("week07 light");


                                                                                  glutDisplayFunc(display);


                                                                                      glutMainLoop();
                                                                                    }
                                                                                    • 利用之前複製的程式碼加入原本茶壺的程式碼中
                                                                                         
                                                                                      #include <GL/glut.h>
                                                                                        const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                                                                                          const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                            const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                              const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


                                                                                                  const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                                                                                                    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                                                                                                      const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                        const GLfloat high_shininess[] = { 100.0f };


                                                                                                            void display()
                                                                                                              {
                                                                                                                    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                      glutSolidTeapot( 0.3 );
                                                                                                                        glutSwapBuffers();
                                                                                                                      }


                                                                                                                          int main(int argc, char**argv)
                                                                                                                            {
                                                                                                                                  glutInit(&argc, argv);
                                                                                                                                    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                      glutCreateWindow("week07 light");


                                                                                                                                          glutDisplayFunc(display);


                                                                                                                                              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();
                                                                                                                                                                          }
                                                                                                                                                                          • 新增一行程式碼:glEnable(GL_DEPTH_TEST);來開啟3D的深淺深度測試->近的會蓋掉遠的
                                                                                                                                                                               
                                                                                                                                                                            #include <GL/glut.h>
                                                                                                                                                                              const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                                                                                                                                                                                const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                  const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                    const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };


                                                                                                                                                                                        const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                                                                                                                                                                                          const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                                                                                                                                                                                            const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                              const GLfloat high_shininess[] = { 100.0f };


                                                                                                                                                                                                  void display()
                                                                                                                                                                                                    {
                                                                                                                                                                                                          glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                            glutSolidTeapot( 0.3 );
                                                                                                                                                                                                              glutSwapBuffers();
                                                                                                                                                                                                            }


                                                                                                                                                                                                                int main(int argc, char**argv)
                                                                                                                                                                                                                  {
                                                                                                                                                                                                                        glutInit(&argc, argv);
                                                                                                                                                                                                                          glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                            glutCreateWindow("week07 light");


                                                                                                                                                                                                                                glutDisplayFunc(display);


                                                                                                                                                                                                                                    glEnable(GL_DEPTH_TEST);


                                                                                                                                                                                                                                        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();
                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                    • 調整light_position的值
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                      #include <GL/glut.h>
                                                                                                                                                                                                                                                                        const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                                                                                                                                                                                                                                                                          const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                                                                                                            const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                                                                                                              const GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };


                                                                                                                                                                                                                                                                                  const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                                                                                                                                                                                                                                                                                    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                                                                                                                                                                                                                                                                                      const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                                                                                                                        const GLfloat high_shininess[] = { 100.0f };


                                                                                                                                                                                                                                                                                            void display()
                                                                                                                                                                                                                                                                                              {
                                                                                                                                                                                                                                                                                                    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                                                                                                                      glutSolidTeapot( 0.3 );
                                                                                                                                                                                                                                                                                                        glutSwapBuffers();
                                                                                                                                                                                                                                                                                                      }


                                                                                                                                                                                                                                                                                                          int main(int argc, char**argv)
                                                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                                                  glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                                                    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                                                                                                                      glutCreateWindow("week07 light");


                                                                                                                                                                                                                                                                                                                          glutDisplayFunc(display);


                                                                                                                                                                                                                                                                                                                              glEnable(GL_DEPTH_TEST);


                                                                                                                                                                                                                                                                                                                                  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>
                                                                                                                                                                                                                                                                                                                                                                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 };
                                                                                                                                                                                                                                                                                                                                                                      GLfloat light_position[] = { 2.0f, 5.0f, -5.0f, 0.0f };


                                                                                                                                                                                                                                                                                                                                                                          const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                                                                                                                                                                                                                                                                                                                                                                            const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                                                                                                                                                                                                                                                                                                                                                                              const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                                                                                                                                                                                                                                                                                                                                                                                const GLfloat high_shininess[] = { 100.0f };


                                                                                                                                                                                                                                                                                                                                                                                    void display()
                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                                                                                                                                                                                                              glutSolidTeapot( 0.3 );
                                                                                                                                                                                                                                                                                                                                                                                                glutSwapBuffers();
                                                                                                                                                                                                                                                                                                                                                                                              }


                                                                                                                                                                                                                                                                                                                                                                                                  void motion(int x, int y)
                                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                                          light_position[0]= (x-150)/10.0;
                                                                                                                                                                                                                                                                                                                                                                                                            light_position[1]=-(y-150)/10.0;
                                                                                                                                                                                                                                                                                                                                                                                                              glLightfv(GL_LIGHT0, GL_POSITION, light_position);
                                                                                                                                                                                                                                                                                                                                                                                                                glutPostRedisplay();
                                                                                                                                                                                                                                                                                                                                                                                                              }


                                                                                                                                                                                                                                                                                                                                                                                                                  int main(int argc, char**argv)
                                                                                                                                                                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                                                                                                                                                                          glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                                                                                                                                                            glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                                                                                                                                                                                                                              glutCreateWindow("week07 light");


                                                                                                                                                                                                                                                                                                                                                                                                                                  glutDisplayFunc(display);
                                                                                                                                                                                                                                                                                                                                                                                                                                    glutMotionFunc(motion);


                                                                                                                                                                                                                                                                                                                                                                                                                                        glEnable(GL_DEPTH_TEST);


                                                                                                                                                                                                                                                                                                                                                                                                                                            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();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 最後老師解釋了Ambient、Diffuse、Specular

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        沒有留言:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        張貼留言