【OpenGL學習】使用VBO和FBO


一、概念

這兩個都是Buffer Object,說白了就是一塊存儲區域。 VBO(頂點緩沖對像)是用來加快渲染的速度,主要思想是在顯卡中分配一塊顯存空間,然后一次性將CPU中的數據傳輸過來,這樣顯示的時候就會直接輸出到顯示器,這樣做的動機是因為CPU到GPU傳輸的瓶頸。 FBO(幀緩沖對像)是用來改變當前幀緩存的輸出位置,默認的幀緩存會直接輸出到顯示器,而有的時候不需要輸出到顯示器,在后台渲染就可以,這個技術叫離屏渲染,渲染完之后再用該紋理進行操作,最終再以某種形式輸出到屏幕,其實類似於以前用的雙緩沖顯示技術。

二、使用方法

http://www.cppblog.com/w2001/archive/2008/05/10/49376.aspx,其核心在於頂點數據的修改和上傳,具體見這里:http://blog.csdn.net/dreamcs/article/details/7702701

和VBO類似的還有個概念叫VA,具體見:http://blog.csdn.net/dreamcs/article/details/7699603,和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();兩句話將對象內部和外部隔離開來,這樣在渲染時候做的一些狀態的修改不會影響到全局的參數。這個地方我就耽誤的了就,一直查不到原因。不過更好的一個習慣是用完了某一個狀態后要記得把該狀態改回來。

四、參考文獻

見文中鏈接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM