例16:一个旋转的立方体
#include <GL/glut.h>
GLfloat X = 10.0f; void myDisplay(void) void myReshape(int w,int h) glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW); void myAnimate(void) glutPostRedisplay();//标记当前窗口需要重新绘制 } int main(int argc,char ** argv) glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); /*创建窗口*/ /*绘制与显示*/ glutDisplayFunc(myDisplay); glutMainLoop(); return(0); |
myDisplay函数中有一个glutSwapBuffers()函数。此函数交换当前窗口使用层的缓存,它将后台缓存中的内容交换到前台缓存中,该函数执行的结果直到显示器垂直回行扫描后才看得到。必须使用双缓存结构,否则此函数不起任何作用。
myAanimate函数中glutPostRedisplay()函数标记当前窗口需要重新绘制。在glutMainLoop函数的事件处理循环的下一个反复中,将调用该窗口的显示回调函数重绘该窗口的图像层。
在main函数中glutInitDisplayMode中为GLUT_DOUBLE,而我们以前的很多例子为GLUT_SINGLE。main函数中还调用了glutIdleFunc,此函数设置全局空闲回调函数。,从而使GLUT程序可以执行后台任务或连续动画。