openGL 基礎(3) vertex buffer

OpenGL 系列分享目的在於介紹如何使用 OpenGL 來繪製畫面。 爲了大家能夠更好理解如何開發遊戲引擎做一些準備工作,同時也推出了C++ 基礎分享,此分享也爲遊戲引擎開發分享服務。在之前我們已經在屏幕上繪製了一個三角形,普及一下,我們在玩遊戲和看CG 動畫的時候,所有的絢麗的畫面都是由若干三角形組成。所以,一切的一切都是從三角形開始,那麼 OpenGL 是怎麼流程將三角形繪製到屏幕上,首先需要 vertex buffer 和 vertex shader。

那麼我們就從 vertex buffer 開始,vertex buffer 這個詞便於理解,大家可以先不用考慮 vertex ,就只想他就是一個 buffer,佔一定字節的內存。大家都是在 C++ 也有像 char 這樣類型 buffer,這裏 vertex buffer 與之不同之處在於這裏buffer 是佔用的 GPU 的內存而不是 CPU 的內存。當我們要畫三角形到畫面時,繪製方法會從 GPU 的 ram 讀取 buffer(頂點信息) 進行繪製。Shader 是一段代碼計算出位置,運行這段代碼可以繪製圖形。

我們需要把之前繪製三角形頂點的數據轉移到到openGL 的 buffer 中,作爲繪製的數據。也就是創建緩存區對象。

我們定義緩存 buffer,這裏第一個參數爲定義 buffer 個數,1 表示我定義一個 buffer。

第二個爲用於存儲單一 ID 或多個 ID 的 GLuint (unsigned int)變量或數組的地址,這裏個人推薦使用 unsigned int 類型代替 openGL 提供的 GLunit ,返回緩存對象的標示符),可以想象爲一個對象 id,shader 可以根據 id 獲取對象。

我們定義一個數組包含三角形頂一點的數據,

在使用 buffer 對象之前,需要將 buffer 對象綁定(連接)到相應的緩存上。glBindBuffer()有2個參數,分別爲目標與buffer。

第一個參數(目標)告訴 VBO 該緩存對象將保存頂點數組數據還是索引數組數據:GL_ARRAY_BUFFER 或 GL_ELEMENT_ARRAY。任何頂點屬性,如頂點座標、紋理座標、法線與顏色分量數組都使用GL_ARRAY_BUFFER。

如何使用 openGL 方法,可以 docs.gl 網址進行搜索

可以使用glBufferData()將數據拷貝到緩存對象,第一個參數(目標)可以爲GL_ARRAY_BUFFER 或 GL_ELEMENT_ARRAY, 這裏爲 GL_ARRAY_BUFFER 。size(圖中的 6)爲待傳遞數據字節數量。第三個參數(圖中的 position)爲源數據數組指針,如 data 爲 NULL,則 VBO 僅預留給定數據大小的內存空間。最後一個參數usage標誌位VBO的另一個性能提示,它提供緩存對象將如何使用:static、dynamic 或 stream、與 read、copy 或 draw。這裏用 GL_STATIC_DRAW 表示僅需修改一次,可以多次使用。

刪除之前繪製三角形的方法,我們現在是 openGL 編程,我們 glDrawArrays 繪製,第一參數爲繪製圖形類型,第二個參數從 buffer 數據第一位開始繪製,第三表示繪製個數,因爲是三個頂點,所以爲 3.。運行程序沒有效果,因爲我們還沒有定義 shader。


openGL 基礎(1)

openGL 基礎 (2)

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