我正在製作一個小型的3D圖形遊戲/演示用於個人學習。我知道d3d9,關於d3d11,但關於opengl目前很少,所以我打算抽象出圖形的實際渲染,這樣我的場景圖和所有「高於」的東西都需要知道如何實際繪製圖形。我打算使它與d3d9一起工作,然後添加d3d11支持,最後是opengl支持。就像學習3D圖形和抽象的練習一樣。opengl中的頂點緩衝區
雖然在這一點上我對opengl知之甚少,也不希望自己的抽象接口暴露出一些在opengl中不易實現的東西。具體來說,我正在尋找頂點緩衝區。在d3d中,它們基本上是一個結構數組,但看看opengl接口的等價物似乎是頂點數組。然而,這些似乎是組織不同,你需要一個單獨的頂點陣列,一個用於法線,一個用於紋理座標等,並設置與glVeexexPointer,glTexCoordPointer等。
我希望能夠實現一個VertexBuffer接口非常類似於directx,但它看起來像在d3d中有一個結構數組,並且在opengl中,每個元素都需要一個單獨的數組,這使得找到一個通用抽象很難提高效率。
有沒有什麼辦法像directx一樣使用opengl?或者有關如何提出更高級別抽象的建議,以便在兩個系統上高效工作?
好吧,這是有道理的。您仍然需要調用不同的函數來設置不同的屬性,但我仍然應該能夠與d3d共享一個結構。嗯,我真的需要更多地瞭解opengl :) – jcoder 2010-04-05 13:03:45
@JB,實際上,如果你使用GL3.0,它會引入頂點數組對象,它封裝了整個事物。 http://www.opengl.org/registry/specs/ARB/vertex_array_object.txt – Bahbar 2010-04-05 13:16:15
避免gl..Pointer作爲瘟疫。改用glVertexAttribPointer。另外,如果可以提供幫助,請避免交錯數據(步幅)。而是將單個頂點屬性順序保存在一個緩衝區對象中。請記住通過對齊數據緩衝區來使GPU快樂。 – 2010-04-05 23:17:03