緩沖對象和頂點數(shù)組對象的封裝
這節(jié)我們要實現(xiàn)VBO、EBO和VAO的封裝。
首先我們把VBO抽象成一個類VertexBuffer。我們將借助類的構(gòu)造函數(shù)和析構(gòu)函數(shù)來自動實現(xiàn)一些基本的操作。

我們在構(gòu)造函數(shù)中實現(xiàn)VBO對象的創(chuàng)建和綁定:

析構(gòu)函數(shù)實現(xiàn)VBO對象的刪除:

此外還要有手動實現(xiàn)綁定和解綁功能的函數(shù):

EBO的封裝和VBO完全一樣,就不贅述了。
VAO的封裝就比較復雜,因為這里涉及到頂點屬性的配置。
首先我們需要創(chuàng)建一個類表示頂點數(shù)據(jù),這個類中包含頂點和頂點的步長。而一個頂點又是由一系列頂點屬性構(gòu)成,因此我們還需要定義一個結(jié)構(gòu)表示頂點屬性:


這里使用模板特化為頂點添加頂點屬性。
有了頂點數(shù)據(jù),下一步就可以實現(xiàn)頂點數(shù)組的封裝。

這里和VBO的封裝大同小異。

唯一的區(qū)別就是多了一個函數(shù),AddAttribs()用于配置頂點屬性。

首先調(diào)用VBO的BInd函數(shù),是為了確保在有多個頂點緩沖對象的情況下,配置頂點屬性時綁定了正確的VBO對象。接著獲取頂點,并用一個循環(huán)取出頂點中的每一個屬性,并進行配置。這里的offset用于計算每個頂點屬性的偏移量。
當我們完成VAO、VBO和EBO對象的封裝后,代碼將變得十分簡潔:

標簽:OpenGL