您的位置:首页 > 编程语言 > VB

【OpenGL学习】使用VBO和FBO

2012-08-22 11:09 465 查看
一、概念

这两个都是Buffer Object,说白了就是一块存储区域。
VBO(顶点缓冲对像)是用来加快渲染的速度,主要思想是在显卡中分配一块显存空间,然后一次性将CPU中的数据传输过来,这样显示的时候就会直接输出到显示器,这样做的动机是因为CPU到GPU传输的瓶颈。
FBO(帧缓冲对像)是用来改变当前帧缓存的输出位置,默认的帧缓存会直接输出到显示器,而有的时候不需要输出到显示器,在后台渲染就可以,这个技术叫离屏渲染,渲染完之后再用该纹理进行操作,最终再以某种形式输出到屏幕,其实类似于以前用的双缓冲显示技术。

二、使用方法
http://www.cppblog.com/w2001/archive/2008/05/10/49376.aspx,其核心在于顶点数据的修改和上传,具体见这里: href="/article/3598309.html" target=_blank>/article/3598309.html

和VBO类似的还有个概念叫VA,具体见:/article/3598308.html,和VBO的不同体现在VA不能修改,只能初始化的时候指定,效率比VBO要高,因为其直接放在了显存中。这里对显示列表和VBO有更详尽的描述和使用方法:http://www.cppblog.com/zmj/archive/2009/01/01/2820.html

FBO的使用方法:http://blog.sina.com.cn/s/blog_4062094e0100alvv.html以及http://www.cnblogs.com/Fancyboy2004/archive/2008/06/02/1212312.html,后者有和Shader结合的代码示例。特别注意的是FBO可以绑定多个对象,即多个纹理,可以通过glDrawBuffers()函数来切换当前的渲染对象,可以很方便地在几个渲染对象之间切换,这正是FBO的精髓所在。同时在FBO中可以使用Shader来进行操作,操作完之后再关闭shader,这样可以高效的完成渲染操作。

三、一些技巧

1.在做每一个VBO对象渲染的时候最好用glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT);和glPopAttrib();两句话将对象内部和外部隔离开来,这样在渲染时候做的一些状态的修改不会影响到全局的参数。这个地方我就耽误的了就,一直查不到原因。不过更好的一个习惯是用完了某一个状态后要记得把该状态改回来。

四、参考文献

见文中链接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: