2020年4月22日 星期三

Week09

 期中考-OpenGL
  • 今天期中考,考了OprnGL的十個常見程式碼

主題: glu/glut函式
  • 先去下載 freeglut windows 版,https://www.transmissionzero.co.uk/software/freeglut-devel/ 選擇 Download freeglut 3.0.0 for MinGW
  • 然後步驟都跟以往一樣,只是稍微去修改裡面的程式碼,改圖案的半徑與高度,還有按+圖片的密度會越來越大,按-密度會變小
階層式移動、階層式轉動
  • 從glut裡面選取一些特定的程式碼複製貼上,拼湊成新的程式就會得到下圖
  • 後來再把那些程式碼移位子,加上myCube(),還有修改顏色,就能得到一紅一黃的圖案,就能得到下圖
  • 我們再加上glRotatef的程式碼,讓圖案可以去轉動,程式碼如下

#include <GL/glut.h>
void myCube()
{
     glPushMatrix();
     glColor3f(1,0,0);
     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();
     glRotatef(angle, 0,0,1);
     myCube();
    glPopMatrix();
    angle++;
     glutSwapBuffers();

}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}


  • 再修改glTranslatef裡面的值,讓它是由上面的頂點開始旋轉


  • 用程式碼再寫一個綠色的機器人身體,讓手臂皆在身體上並且可以旋轉
#include <GL/glut.h>
void myCube()
{
     glPushMatrix();
     glColor3f(1,0,0);
     glScalef(0.5,0.2,0.2);
     glutSolidCube(1);
 glPopMatrix();
}
float angle=0;
void display()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glColor3f(0,1,0);
   glutSolidCube(0.6);
   glPushMatrix();
     glTranslatef(0.3,0.3,0);
     glRotatef(angle, 0,0,1);
     glTranslatef(0.22,0,0);
     myCube();
    glPopMatrix();
    angle++;
     glutSwapBuffers();

}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week09");
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutMainLoop();
}



沒有留言:

張貼留言