#include<GL/glut.h>
#include <windows.h>
static GLfloat spin=0.0; //旋轉量
static GLfloat move=0.0; //平移量
static GLfloat size=1.0; //縮放量
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0); //指定清除顏色(黑色),即背景顏色
glShadeModel(GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); //清除所有的像素
glPushMatrix();
glTranslatef(move,0,0); //移動,參數含義(x軸位移,y軸位移,z軸位移)
glRotatef(spin,0,0,1); //旋轉,參數含義(旋轉量,x軸,y軸,z軸)
glScalef(size,size,1); //縮放,參數含義(x軸倍數,y軸倍數,z軸倍數)
glColor3f(0.0,1.0,0.0); //繪製顏色RGB
glRectf(-25.0,-25.0,25.0,25.0); //繪製矩形
glPopMatrix();
glutSwapBuffers();
}
void reshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
}
void spinAndSizeDisplay()
{
spin>360?spin-=360:spin+=2;
size>2?size-=2:size+=0.003;
glutPostRedisplay(); //標記當前窗口需要重繪,否則不會旋轉
Sleep(10);
}
void moveDisplay()
{
move=move>20?move-=20:move+=1;
glutPostRedisplay(); //標記當前窗口需要重繪,否則不會旋轉
Sleep(10);
}
int main(int argc,char* argv[])
{
glutInit(&argc,argv); //初始化GLUT並處理命令行參數
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); //指定模式:雙緩存;RGB模式
glutInitWindowSize(250,250); //指定窗口大小(像素)
glutInitWindowPosition(300,200); //指定窗口左上角在屏幕上的位置
glutCreateWindow(argv[0]); //使用OpenGL場景創建一個窗口,參數爲窗口名稱
init(); //調用初始化函數
glutDisplayFunc(display); //顯示
glutReshapeFunc(reshape); //重繪
glutIdleFunc(spinAndSizeDisplay); //旋轉&縮放
//glutIdleFunc(moveDisplay); //移動(與上邊函數只能有一個有效)
glutMainLoop(); //進入主循環並處理事件,此時創建的所有窗口都會顯示出來,被渲染到這些窗口中的內容也將顯示出來,程序開始處理事件,註冊的顯示回調函數被觸發
return 0; //ANSI C要求函數main()返回一個int值
}
效果圖: