本文主要是介绍OpenGL双缓冲,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.双缓冲技术解决的问题
在计算机上的动画与实际的动画有些不同:实际的动画都是先画好了,播放的时候直接拿出来显示就行。计算机动画则是画一张,就拿出来一张,再画下一张,再拿出来。如果所需要绘制的图形很简单,那么这样也没什么问题。但一旦图形比较复杂,绘制需要的时间较长,问题就会变得突出。
让我们把计算机想象成一个画图比较快的人,假如他直接在屏幕上画图,而图形比较复杂,则有可能在他只画了某幅图的一半的时候就被观众看到。而后面虽然他把画补全了,但观众的眼睛却又没有反应过来,还停留在原来那个残缺的画面上。也就是说,有时候观众看到完整的图象,有时却又只看到残缺的图象,这样就造成了屏幕的闪烁。
如何解决这一问题呢?我们设想有两块画板,画图的人在旁边画,画好以后把他手里的画板与挂在屏幕上的画板相交换。这样以来,观众就不会看到残缺的画了。这一技术被应用到计算机图形中,称为双缓冲技术,即:在存储器(很有可能是显存)中开辟两块区域,一块作为发送到显示器的数据,一块作为绘画的区域,在适当的时候交换它们。由于交换两块内存区域实际上只需要交换两个指针,这一方法效率非常高,所以被广泛的采用。
注意:虽然绝大多数平台都支持双缓冲技术,但这一技术并不是OpenGL标准中的内容。OpenGL为了保证更好的可移植性,允许在实现时不使用双缓冲技术。当然,我们常用的PC都是支持双缓冲技术的。
2.OPENGL使用双缓冲技术
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //其中GLUT_SINGLE表示单缓冲,如果改成GLUT_DOUBLE就是双缓冲了。
glutSwapBuffers() //绘制完成后提交“画板”
当然还有需要更改的地方——每次绘制完成时,我们需要交换两个缓冲区,把绘制好的信息用于屏幕显示(否则无论怎么绘制,还是什么都看不到)。如果使用GLUT工具包,也可以很轻松的完成这一工作,只要在绘制完成时简单的调用glutSwapBuffers函数就可以了。
opengl中glPushMatrix()he glPopMatrix()用法小结 -- 我学院
如何理解OpenGL中着色器,渲染管线,光栅化等概念?
下载opengl的glut.h头文件和库 + 如何vs2013中配置OpengGL的编程环境
http://blog.csdn.net/KjfureOne/article/category/6564442
波兰式转为逆波兰式——2016年华为笔试最后一题
一只加班狗的絮絮叨叨
问题:
why使用双缓冲 / 矩阵栈只有3种 / 笛卡尔与齐次坐标转化 / 渲染管线过程 / 如何搭建环境
这篇关于OpenGL双缓冲的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!