OpenGL學習 使用VBO和FBO

2022-04-28 11:06:15 字數 837 閱讀 7643

一、概念

這兩個都是buffer object,說白了就是一塊儲存區域。

vbo(頂點緩衝對像)是用來加快渲染的速度,主要思想是在顯示卡中分配一塊視訊記憶體空間,然後一次性將cpu中的資料傳輸過來,這樣顯示的時候就會直接輸出到顯示器,這樣做的動機是因為cpu到gpu傳輸的瓶頸。

fbo(幀緩衝對像)是用來改變當前幀快取的輸出位置,預設的幀快取會直接輸出到顯示器,而有的時候不需要輸出到顯示器,在後台渲染就可以,這個技術叫離屏渲染,渲染完之後再用該紋理進行操作,最終再以某種形式輸出到螢幕,其實類似於以前用的雙緩衝顯示技術。

二、使用方法

其核心在於頂點資料的修改和上傳,具體見這裡:

和vbo類似的還有個概念叫va,具體見:和vbo的不同體現在va不能修改,只能初始化的時候指定,效率比vbo要高,因為其直接放在了視訊記憶體中。這裡對顯示列表和vbo有更詳盡的描述和使用方法:

fbo的使用方法:以及後者有和shader結合的**示例。特別注意的是fbo可以繫結多個物件,即多個紋理,可以通過gldrawbuffers()函式來切換當前的渲染物件,可以很方便地在幾個渲染物件之間切換,這正是fbo的精髓所在。同時在fbo中可以使用shader來進行操作,操作完之後再關閉shader,這樣可以高效的完成渲染操作。

三、一些技巧

1.在做每乙個vbo物件渲染的時候最好用glpushattrib(gl_viewport_bit | gl_color_buffer_bit);和glpopattrib();兩句話將物件內部和外部隔離開來,這樣在渲染時候做的一些狀態的修改不會影響到全域性的引數。這個地方我就耽誤的了就,一直查不到原因。不過更好的乙個習慣是用完了某乙個狀態後要記得把該狀態改回來。

四、參考文獻

見文中鏈結。

vbo和fbo的結合使用

效果圖 上圖實現了這樣乙個效果 大的正方體每個面,都有乙個旋轉的小正方體 實現原理 1,建立fbo 2,繪製乙個場景,但這個場景並不顯示到視窗 3,將這個場景渲染到乙個建立的動態紋理上面 4,再次繪製其他場景 5,將fbo裡面的動態紋理貼到繪製的其他模型上 實現 virtual void rende...

OpenGL學習筆記 OpenGL的變換和矩陣

opengl的變換和矩陣 1 指定矩陣型別 opengl中使用glmatrixmode指定當前要設定的矩陣型別,常用的引數是gl projection和gl modelview,還有gl texture。opengl將視點變換 即攝像機變換 和模型變換 即物體變換和世界變換 合二為一了。glmatr...

OpenGL學習筆記 OpenGL的變換和矩陣

opengl的變換和矩陣 1 指定矩陣型別 opengl中使用glmatrixmode指定當前要設定的矩陣型別,常用的引數是gl projection和gl modelview,還有gl texture。opengl將視點變換 即攝像機變換 和模型變換 即物體變換和世界變換 合二為一了。glmatr...