GLUT教程(四) GLUT动画
来源:互联网 发布:java教材 编辑:程序博客网 时间:2024/06/09 05:33
到现在为止,我们有了一个画着一个白色三角形的OpenGL窗口,但一点也不激动人心。现在让我们在这节教程里,让这个三角形自己旋转起来。
让我们回到main()函数,增加些额外的设置。首先告诉GLUT我们想要一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画。使用双缓冲区可以预防闪烁。
………….
glutInitDisplayMode(GL_DEPTH|GLUT_DOUBLE|GLUT_RGBA);
…………
接着我们要做的是告诉GLUT,当应用程序空闲的时候渲染函数应该被调用。这导致GLUT一直调用渲染函数而产生动画。GLUT提供了一个函数:glutIdleFunc.这个函数使另一个函数在程序空闲的时候就会被调用。
void glutIdleFunc(void(*func)(void));
参数:
func:在程序空闲的时候就会被调用的函数的函数名。
按照我们的想法,当程序空闲时应该调用的函数是我们先前定义的渲染函数: renderScene。由于OpenGL默认没有开启深度测试,我们还要开启它,这样我们才能知道哪个物体在前面,哪个物体在后面。深度测试的开启在main()函数里,下面看看现在的main函数。
void main(int argc, char **argv) {
glutInit(&argc, argv);
//
在这里设置双缓冲区。
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("3D Tech- GLUT Tutorial");
glutDisplayFunc(renderScene);
//
这里让程序空闲时调用renderScene,
glutIdleFunc(renderScene);
glutReshapeFunc(changeSize);
//
开启深度测试。
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
下面就是设置渲染函数renderScene。我们定义了一个浮点型变量并初始化为0.0,下面在renderScene函数加一些必须的东西。
float angle=0.0;
void renderScene(void) {
//
注意我们这里清除了深度缓冲区。
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//
保存当前模型视图矩阵。
glPushMatrix();
glRotatef(angle,0.0,1.0,0.0);
glBegin(GL_TRIANGLES);
glVertex3f (-0.5,-0.5,0.0);
glVertex3f (0.5,0.0,0.0);
glVertex3f (0.0,0.5,0.0);
glEnd();
//
弹出堆栈
glPopMatrix();
//
交换缓冲区
glutSwapBuffers();
//
让angle自动增加。
angle++;
}
glutSwapBuffers函数交换了前后缓冲区,函数原型如下:
void glutSwapBuffers();
- OpenGL---GLUT教程(四) GLUT动画
- GLUT教程(四) GLUT动画
- OpenGL---GLUT教程(四) GLUT动画
- OpenGL---GLUT教程(四) GLUT动画
- OpenGL---GLUT教程(二) GLUT初始化
- OpenGL---GLUT教程(九) GLUT鼠标
- OpenGL---GLUT教程(十) GLUT菜单
- GLUT教程(二) GLUT初始化
- GLUT教程(三) GLUT窗口设置
- GLUT教程(五) GLUT键盘控制
- GLUT教程(六) GLUT场景漫游
- GLUT教程(九) GLUT鼠标
- GLUT教程(十) GLUT菜单
- OpenGL---GLUT教程(九) GLUT鼠标
- OpenGL---GLUT教程(二) GLUT初始化
- OpenGL---GLUT教程(十) GLUT菜单
- OpenGL---GLUT教程(二) GLUT初始化
- OpenGL---GLUT教程(九) GLUT鼠标
- C#学习
- GLUT教程(二) GLUT初始化
- 如何学好一门语言
- 乡愁四韵
- GLUT教程(三) GLUT窗口设置
- GLUT教程(四) GLUT动画
- 在Lotus Notes中禁用文件删除
- JAR详解
- Cisco.Press.CCNP.ONT.Portable.Command.Guide.Apr.2008.eBook-BBL
- GLUT教程(五) GLUT键盘控制
- Cisco.Press.CCNP.ISCW.Portable.Command.Guide.Mar.2008.eBook-BBL
- 用MyEclipse Database Explorer连接FREEBSD上mysql数据库出现问题解决
- Apress.Pro.SQL.Server.Disaster.Recovery.Mar.2008.eBook-BBL
- Apress.Pro.VB.2008.and.the.dot.NET.3.5.Platform.3rd.Edition.Mar.2008.eBook-BBL