- 主要是运用glutIdleFunc()函数来实现动画效果,glutIdleFunc()会在空闲时被调用,然后用angle记录角度
gluPerspective(45, ratio, 0, 100);用来设置三维透视模式
使用glRotatef(angle, 0, 1, 0)绕y轴旋转,之后调用 glTranslatef(-1, -1,
-5);移动方块到一个可以看见的地方。
最后调用glutWireCube(1)在当前坐标系原点绘制一个线框立方体
绘制完成后使用glutSwapBuffers();交换缓冲区,显示图像到屏幕上
#include<glut.h>
float angle = 0;
void reShape(int width,int height) {
float ratio = (float)width / height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, ratio, 0, 100);
}
void myDisplay() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-1, -1, -5);
glRotatef(angle, 0, 1, 0);
angle += 0.5f;
glutWireCube(1);
glutSwapBuffers();
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(600, 400);
glutCreateWindow("旋转的立方体");
glutReshapeFunc(reShape);
glutDisplayFunc(myDisplay);
glutIdleFunc(myDisplay);
glutMainLoop();
return 0;
}
效果