2017年4月11日 星期二

Week8_王婉懿的上課筆記

  • 作業一 : 打光

  •           步驟一 : 開啟 CodeBlocks

              步驟二 : 建立新專案

              步驟三 : 專案類型選擇GLUT Project

              步驟四 : 出現畫面上的視窗,點選 next
              步驟五 : 專案名稱打上「學號」,儲存目的為桌面,點選 Next

              步驟六 : 到FB下載 freeglut

              步驟七 : 回到CodeBlocks,找出 freeglut下載位置,點選 Next

             步驟八 : 點選 Finish

             步驟九 : 開始執行程式
     
              步驟十 : 修改部分程式碼,如下 :
                 程式 :
                 #include <GL/glut.h>
                 static void display(void)
                 {
                     const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
                     const double a = t*90.0;
                     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                     glColor3d(1,0,0);
                     glPushMatrix();//備份矩陣
                         //glTranslatef(x,y,z);//移動
                         //glRotatef(angle,x,y,z);//旋轉
                         glutSolidTeapot(0.3);
                     glPopMatrix();//還原矩陣

                     glutSwapBuffers();
                 }
                 const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                 const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
                 const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                 const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                 const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat high_shininess[] = { 100.0f };
                 /* Program entry point */
                 int main(int argc, char *argv[])
                 {
                     glutInit(&argc, argv);
                     glutInitWindowSize(640,480);
                     glutInitWindowPosition(10,10);
                     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                     glutCreateWindow("GLUT Shapes");
                     //glutReshapeFunc(resize);
                     glutDisplayFunc(display);
                     //glutKeyboardFunc(key);
                     //glutIdleFunc(idle);

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

     
     
              步驟十 : 執行打光程式
     

    • 作業二 : 旋轉打光
              步驟一 : 修改作業一的程式碼,茶壺可以旋轉。
                 程式 :
                 #include <GL/glut.h>
                 float angle=0;//要重畫
                 static void display(void)
                 {
                     angle++;
                     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                     glColor3d(1,0,0);
                     glPushMatrix();//備份矩陣
                         //glTranslatef(x,y,z);//移動
                         glRotatef(angle,0,1,0);//旋轉
                         glutSolidTeapot(0.3);
                     glPopMatrix();//還原矩陣

                     glutSwapBuffers();
                 }
                 const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
                 const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
                 const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
                 const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
                 const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
                 const GLfloat high_shininess[] = { 100.0f };
                 /* Program entry point */
                 int main(int argc, char *argv[])
                 {
                     glutInit(&argc, argv);
                     glutInitWindowSize(640,480);
                     glutInitWindowPosition(10,10);
                     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                     glutCreateWindow("GLUT Shapes");
                     //glutReshapeFunc(resize);
                     glutDisplayFunc(display);
                     //glutKeyboardFunc(key);
                     glutIdleFunc(display);

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



  • 作業三 : 各種形狀
  •           步驟一 : 修改作業二的程式碼" //glutSolidTeapot(0.3);
                                                                      glutSolidCone(0.8,0.3,30,30);",變成扁錐形。

              步驟二 : 修改數值"glutSolidCone(0.3,0.3,30,30);",變成錐形。

              步驟三 : 修改作業二的程式碼" glutWireCone(0.3,0.8,5,30);",變成網狀錐形。

              步驟四 : 類似步驟,做成球型。
                           修改一行"glutSolidSphere(0.7,30,30);"

     
                             修改一行"glutWireSphere(0.7,30,30);"
                               修改數值"glutWireSphere(0.7,6,30);"
                                 修改數值"glutWireSphere(0.7,6,8);"
     


    • 作業四 : 上下層茶壺
              步驟一 : 繼續修改程式。
                 程式  :
                 #include <GL/glut.h>
                 float angle=0;//要重畫
                 static void display(void)
                 {
                     angle++;
                     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                     glColor3d(1,0,0);
                     glPushMatrix();//備份矩陣
                         glTranslatef(0,0.5,0);//移動
                         glutSolidTeapot(0.3);
                     glPopMatrix();//還原矩陣

                       glPushMatrix();//備份矩陣
                         glRotatef(angle,0,1,0);//旋轉
                         glutSolidTeapot(0.3);
                         //glutWireCone(0.3,0.8,5,30);
                     glPopMatrix();//還原矩陣

                     glutSwapBuffers();
                 }//下方程式碼不變


         

    沒有留言:

    張貼留言