2020年4月22日 星期三

Week09 - 07161045

期中考
  • 照老師上課教的主題, 把 OpenGL必背10函式(其實是11個函式) 寫出來
  • 老師很貼心的花了兩天時間趕出一個模擬測驗網址,老師辛苦了!
GLUT函式
  • 先開啟GLUT Project
  • 老師先帶我們認識裡面glutSolid的程式碼
  • 接下來,利用程式碼做出一個長方形
  • 做出一個長方形程式碼如下:

#include <GL/glut.h>
void display()
    {
          glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

              glPushMatrix();
                    glColor3f(0.2,0.3,0.6);
                      glScalef(0.5,0.2,0.2);
                        glutSolidCube(1);
                      glPopMatrix();

                          glutSwapBuffers();
                        }
                          int main(int argc, char *argv[])
                            {
                                  glutInit(&argc, argv);
                                    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                                      glutCreateWindow("Week09");

                                          glutDisplayFunc(display);
                                            glutMainLoop();
                                          }

                                               
                                          • 利用Cube程式碼做出其他長方形
                                          • 做出兩個長方形程式碼如下:
                                          #include <GL/glut.h>
                                            void myCube()
                                              {
                                                    glPushMatrix();
                                                          glScalef(0.5,0.2,0.2);
                                                            glutSolidCube(1);
                                                          glPopMatrix();
                                                        }
                                                          void display()
                                                            {
                                                                  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                                                                      glPushMatrix();
                                                                            glColor3f(0.9,0.2,0.6);
                                                                              myCube();

                                                                                  glTranslatef(0.4,0.1,0);
                                                                                    glColor3f(0.6,0.9,0.3);
                                                                                      myCube();
                                                                                    glPopMatrix();
                                                                                      glutSwapBuffers();
                                                                                    }
                                                                                      int main(int argc, char *argv[])
                                                                                        {
                                                                                              glutInit(&argc, argv);
                                                                                                glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                  glutCreateWindow("Week09");

                                                                                                      glutDisplayFunc(display);
                                                                                                        glutMainLoop();
                                                                                                      }

                                                                                                           

                                                                                                      T-R-T 轉動
                                                                                                      • 利用angel程式碼讓長方形旋轉
                                                                                                      • 旋轉長方形程式碼如下:
                                                                                                      #include <GL/glut.h>
                                                                                                        void myCube()
                                                                                                          {
                                                                                                                glPushMatrix();
                                                                                                                      glColor3f(0.9,0.2,0.6);
                                                                                                                        glScalef(0.5,0.2,0.2);
                                                                                                                          glutSolidCube(1);
                                                                                                                        glPopMatrix();
                                                                                                                      }
                                                                                                                        float angel=0;
                                                                                                                          void display()
                                                                                                                            {
                                                                                                                                  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                                                                                                                                      glPushMatrix();
                                                                                                                                            glRotatef(angel,0,0,1);
                                                                                                                                              myCube();
                                                                                                                                            glPopMatrix();
                                                                                                                                              angel++;
                                                                                                                                                glutSwapBuffers();
                                                                                                                                              }
                                                                                                                                                int main(int argc, char *argv[])
                                                                                                                                                  {
                                                                                                                                                        glutInit(&argc, argv);
                                                                                                                                                          glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                            glutCreateWindow("Week09");
                                                                                                                                                              glutIdleFunc(display);

                                                                                                                                                                  glutDisplayFunc(display);
                                                                                                                                                                    glutMainLoop();
                                                                                                                                                                  }

                                                                                                                                                                       
                                                                                                                                                                  • 將轉動的中心點固定在畫面中心
                                                                                                                                                                  • 程式碼如下:
                                                                                                                                                                  #include <GL/glut.h>
                                                                                                                                                                    void myCube()
                                                                                                                                                                      {
                                                                                                                                                                            glPushMatrix();
                                                                                                                                                                                  glColor3f(0.9,0.5,0.4);
                                                                                                                                                                                    glScalef(0.5,0.2,0.2);
                                                                                                                                                                                      glutSolidCube(1);
                                                                                                                                                                                    glPopMatrix();
                                                                                                                                                                                  }
                                                                                                                                                                                    float angel=0;
                                                                                                                                                                                      void display()
                                                                                                                                                                                        {
                                                                                                                                                                                              glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

                                                                                                                                                                                                  glPushMatrix();
                                                                                                                                                                                                        glRotatef(angel,0,0,1);
                                                                                                                                                                                                          glTranslatef(0.22,0,0);(新增一行程式碼)
                                                                                                                                                                                                            myCube();
                                                                                                                                                                                                          glPopMatrix();
                                                                                                                                                                                                            angel++;
                                                                                                                                                                                                              glutSwapBuffers();
                                                                                                                                                                                                            }
                                                                                                                                                                                                              int main(int argc, char *argv[])
                                                                                                                                                                                                                {
                                                                                                                                                                                                                      glutInit(&argc, argv);
                                                                                                                                                                                                                        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                          glutCreateWindow("Week09");
                                                                                                                                                                                                                            glutIdleFunc(display);

                                                                                                                                                                                                                                glutDisplayFunc(display);
                                                                                                                                                                                                                                  glutMainLoop();
                                                                                                                                                                                                                                }

                                                                                                                                                                                                                                      

                                                                                                                                                                                                                                階層轉動
                                                                                                                                                                                                                                • 增加一個身體,順序不能錯!
                                                                                                                                                                                                                                • 程式碼如下:

                                                                                                                                                                                                                                #include <GL/glut.h>
                                                                                                                                                                                                                                void myCube()
                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                        glPushMatrix();
                                                                                                                                                                                                                                              glColor3f(0.9,0.5,0.4);
                                                                                                                                                                                                                                                glScalef(0.5,0.2,0.2);
                                                                                                                                                                                                                                                  glutSolidCube(1);
                                                                                                                                                                                                                                                glPopMatrix();
                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                float angel=0;
                                                                                                                                                                                                                                                  void display()
                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                          glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                                                                                                                                                                                                                                            glColor3f(0.5,0.6,0.);(新增一行程式碼)
                                                                                                                                                                                                                                                              glutSolidCube(0.6);(新增一行程式碼)
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                  glPushMatrix();
                                                                                                                                                                                                                                                                        glTranslatef(0.3,0.3,0.3);(新增一行程式碼)
                                                                                                                                                                                                                                                                          glRotatef(angel,0,0,1);
                                                                                                                                                                                                                                                                            glTranslatef(0.22,0,0);
                                                                                                                                                                                                                                                                              myCube();
                                                                                                                                                                                                                                                                            glPopMatrix();
                                                                                                                                                                                                                                                                              angel++;
                                                                                                                                                                                                                                                                                glutSwapBuffers();
                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                int main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                        glutInit(&argc, argv);
                                                                                                                                                                                                                                                                                          glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                                                                                                                                                                                                                                                                                            glutCreateWindow("Week09");
                                                                                                                                                                                                                                                                                              glutIdleFunc(display);

                                                                                                                                                                                                                                                                                                  glutDisplayFunc(display);
                                                                                                                                                                                                                                                                                                    glutMainLoop();
                                                                                                                                                                                                                                                                                                  }
                                                                                                                                                                                                                                                                                                         

                                                                                                                                                                                                                                                                                                    沒有留言:

                                                                                                                                                                                                                                                                                                    張貼留言