2020年4月22日 星期三

(*^ω^*) 喵~Week09

➽ glu/glut函式

  • 認識程式碼 glutSolid-
    • Ctrl + F 搜尋 glutSolid
    • glutSolidSphere(1,slices,stacks);//圓形(半徑,直切,橫切)
    • glutSolidCone(1,1,slices,stacks);//錐形/甜筒(圓半徑,高度,直切,橫切)
    • glutSolidTorus(0.2,0.8,slices,stacks);//環形(小圓半徑,大圓半徑,直切,橫切)
    • Tugas Besar Grafkom | Tugas Grafkom if-10_2008
  • 玩方塊
    • 複製之前的程式碼
      • #include <GL/glut.h>
      • void display()
      • {
      •     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

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

      •     glutCreateWindow("Week09");
      •     glutDisplayFunc(display);
      •     glutMainLoop();
      • }
    • 加入 glutSolidCube(1); //(大小)
      • 因為沒打光所以式平面的
    • 控制長寬高和顏色如下
      • glPushMatrix();
      •         glColor3f(1,0,0);
      •         glScalef(0.5,0.2,0.2);
      •         glutSolidCube(1);
      • glPopMatrix();
    • 簡化程式碼➝用自定函式
      • void myCube()
      • {
      •     glPushMatrix();
      •         glColor3f(1,0,0);
      •         glScalef(0.5,0.2,0.2);
      •         glutSolidCube(1);
      •     glPopMatrix();
      • }
    • 記得在display呼叫 myCube()
  • 放上第二個方塊
    • display裡增加如下
      • glPushMatrix();
      •         glColor3f(1,0,0);//紅色
      •         myCube();

      •         glTranslatef(0.4,0.2,0);
      •         glColor3f(1,1,0);//黃色
      •         myCube();
      • glPopMatrix();
    • 記得myCube()的顏色要刪除(glColor3f(1,0,0);)
                • 方塊轉動
                  • #include <GL/glut.h>
                  • void myCube()
                  • {
                  •     glPushMatrix();
                  •         glScalef(0.5,0.2,0.2);
                  •         glutSolidCube(1);
                  •     glPopMatrix();
                  • }
                  • float angle=0;//加個角度變數
                  • void display()
                  • {
                  •     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                  •     glPushMatrix();
                  •         glColor3f(1,0,0);
                  •         glRotatef(angle,0,0,1);
                  •         myCube();
                  •     glPopMatrix();
                  •     angle++;
                  •     glutSwapBuffers();
                  • }
                  • int main(int argc, char *argv[])
                  • {
                  •     glutInit(&argc, argv);
                  •     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
                  •     glutIdleFunc(display);//有空閒時就更新
                  •     glutCreateWindow("Week09");
                  •     glutDisplayFunc(display);
                  •     glutMainLoop();
                  • }
                • 將要轉動的中心點移至中間
                  • glRotatef(angle,0,0,1);下一行加上glTranslatef(0.22,0,0);
                • 再移至想要的點
                  • glRotatef(angle,0,0,1);上一行加上glTranslatef(0.3,0.3,0);
                ➷➷這裡的程式碼要由下往上看

                                                                    沒有留言:

                                                                    張貼留言