本周重點: 移動、旋轉、放大、縮小
函式:01.移動
glTranslatef( x, y, z); ///對應位置分別是x,y,z象限的位置,f指浮點數float。
02.旋轉
glRotatef(角度 x, y, z);
03.放大、縮小
glScale( x, y, z);
***************************************************************************
運用01: 移動函式
#include <GL/glut.h> ///呼叫GL/glut的功能
void display() ///用來畫東西的顯示函式
{
glTranslatef(0.45, 0.7, 0); ///移動至畫面右上方
glutSolidTeapot(0.3); ///用glut畫一個實心的茶壺
glFlush(); ///把他沖出去(從記憶體把東西叫出來)
}
int main(int argc, char **argv) ///main()的參數,也可寫成int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutCreateWindow("林周罵尬李拚了!"); ///開一個glut視窗(小駱駝命名法)
glutDisplayFunc(display);
glutMainLoop(); ///glut的主要迴圈,卡住用的
return 0;
}
運用02: 旋轉函式
#include <GL/glut.h> ///呼叫GL/glut的功能
float angle=0;
void display() ///用來畫東西的顯示函式
{
glClear(GL_COLOR_BUFFER_BIT);///清畫面
glRotatef(angle,1, 1,0);
glutWireTorus(0.3,0.7,30,30); ///用glut畫一個空心,其對應位置為(內徑r,半徑R,橫切,縱切)
glFlush();
angle+=2;
}
int main(int argc, char **argv) ///main()的參數,也可寫成int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutCreateWindow("林周罵尬李拚了!"); ///開一個glut視窗(小駱駝命名法)
glutDisplayFunc(display);
glutMainLoop(); ///glut的主要迴圈,卡住用的
return 0;
}
進一步自動轉:
#include <GL/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT);///因為畫面會亂,所以要清上個畫面
glPushMatrix(); ///因為畫面會亂,所以要備份Matrix
glRotatef(angle,1, 1,0);
glutWireTorus(0.3,0.7,30,30); ///用glut畫一個空心,其對應位置為(內徑r,半徑R,橫切,縱切)
glPopMatrix(); ///因為畫面會亂,所以要還原Matrix
glFlush();
angle+=0.1;
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutCreateWindow("林周罵尬李拚了!");
glutDisplayFunc(display);
glutIdleFunc(display); ///閒閒沒事做時,就去呼叫裡面的函式display()
glutMainLoop();
return 0;
}
沒有留言:
張貼留言