我是靠谱客的博主 微笑黄豆,这篇文章主要介绍OpenGL:正方形旋转小例子,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<GL/glut.h> #include<stdio.h> void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor4f(0.2f, 0.4f, 0.6f, 0.0f); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); //glFlush(); glutSwapBuffers(); } static float angle = 0.0; void myIdle(void) { //angle = angle + 0.1;//旋转的角度不断增加,旋转越来越快 angle = 0.5;//固定角度,旋转是匀速的 if (angle > 360) angle = 0.0; glRotatef(angle, 0, 0, 1); glutPostRedisplay(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("hello world"); glutDisplayFunc(display); glutIdleFunc(&myIdle);//在程序空闲的时候就会被调用 glutMainLoop(); return 0; }

glFlush是强制刷新,要知道OPENGL是使用一条渲染管线线性处理命令的,一般情况下,我们提交给OPENGL的指令并不是马上送到驱动程序里执行的,而是放到一个缓冲区里面,等这个缓冲区满了再一次过发到驱动程序里执行;很多时候只有几条指令是填充不满那个缓冲区的,这就是说这些指令根本没有被发送到驱动里,所以我们要调用glFlush来强制把这些指令送到驱动里进行处理。

glutSwapBuffers是交换缓冲区,当程序使用的是双缓冲技术时使用;所有的绘制都是绘制到一个后台的缓冲区里面的,如果不交换缓冲区,就看不到绘制的东西了

双缓存技术使用两个颜色缓存――前台缓存和后台缓存,前台缓存用于刷新显示屏,后台缓存用于应用程序的绘制。交换前台缓存和后台缓存的函数是void glutSwapBuffers() ,用它取代显示回调函数中的glFlush()即可。要用双缓存技术,需要在初始化时就指定,把原来的

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB)

改为glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB)。

最后

以上就是微笑黄豆最近收集整理的关于OpenGL:正方形旋转小例子的全部内容,更多相关OpenGL内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部