OpenGL遊戲引擎開發[2]-使用VAO和VBO繪製圖形

基本概念

本節介紹如何使用VAO和VBO進行圖形繪製。

關於VAO和VBO的概念,大家可以查閱 LearnOpenGL 等相關教程,我如果介紹的話,篇幅就太長了。而這些常見的OpenGL概念網上資料很多,這裏我只簡單介紹下我對相關概念的理解,如果各位不瞭解話,請查閱相關的OpenGL書籍。

CPU 與 GPU

大家都知道,我們平時寫的程序是運行在CPU上的,CPU適合做邏輯運算。圖形程序需要大量的數學計算,而這些計算對每個頂點來說都是相同的,比如說:一個精細的遊戲人物模型由100萬個頂點組成,控制該人物從場景中一個地方走到另一個地方就需要做平移變換,方法就是對組成模型的每個頂點都乘以一個平移變換矩陣,一個模型倒沒什麼,大家想想你們平時玩的一個遊戲,場景中由多少個物體,再加上每個物體表面光照的計算,如果使用CPU來計算的話是很難達到實時渲染的。不信,大家自己寫一個for循環1到100萬,在for循環內部做一些耗時操作感受下。

所以,OpenGL使用GPU來進行這些頂點信息的計算,GPU就很適合做這些計算。因爲這些計算有個特點,就是每個頂點的計算都是相同的,而且互不相干,因此可以並行處理。後面我們介紹的Shader就是GPU上並行運行的處理這些頂點計算、光照計算的程序。

內存 與 顯存(顯卡的內存)

圖形程序也是程序,它只有渲染的那部分是藉助GPU完成的, 而關於邏輯運算,比如:加載遊戲數據,處理遊戲中玩家的輸入,遊戲邏輯等這些操作還是在GPU上運行的。遊戲數據包括遊戲需要顯示的數據,比如:遊戲人物的網格數據,怪物的網格數據等;還有就是玩家數據,比如得分、等級等。前者需要從本地磁盤讀取,加載到內存中,需要顯示的時候,才調用相關的OpenGL命令將數據從內存中發送到GPU的顯存。大家都知道,既然這些數據需要在顯卡上做計算,那麼當然GPU從顯存中拿數據比從內存中拿數據要快得多。OpenGL就提供了管理顯存中需要渲染數據的對象VAO和VBO。

VAO 和 VBO

VBO:頂點緩存對象,其中存儲着頂點的相關信息(包括:頂點座標、頂點顏色、頂點法線、紋理座標等,這些也就是常說的頂點屬性)。

VAO:頂點數組對象,內部維護多個頂點屬性列表,而頂點屬性存儲在VBO中,即VAO中存儲着VBO中有關頂點屬性配置的信息。

代碼實現

  1. 創建RawModel類,存儲模型的頂點數據
  1. 創建Loader類,加載頂點數據
  1. 創建MasterRenderer類,渲染頂點數據
  1. 最後我們在App類中測試下,就來繪製一個經典的三角形吧。當然你想繪製其他的,也是照葫蘆畫瓢的事。
  1. 結果

三角形是黑色的,因爲我們沒給他設置顏色。下一節,我們介紹着色器,給三角形着色。

PS:說了你可能不信,背景色我隨手寫的。

源碼:https://ww.lanzous.com/icaxqja

歡迎大家關注我的公衆號【OpenGL編程】。

每天進步一點點,探索3D編程背後的技術細節,不再做只會“調包”的傻小白。以幽默風趣的行文風格,近乎白話文的專業知識講解,分享3D編程的心得、教程、算法,帶你走進3D編程的世界。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章