2011-02-03 47 views
9

我已經嘗試了很多個月,學習IDirect3DVertexBuffer9IDirect3DIndexBuffer9如何工作。我已經閱讀過多本書,電子書和論壇,但仍然無法掌握它們的工作方式。有人能幫助我理解他們如何工作以及他們如何鏈接在一起? PS:我試過搜索相關的問題,但沒有任何關注我的東西。在Direct3D中與頂點和索引緩衝區掙扎

謝謝。

回答

7

IndexBuffers用於存儲器&速度優化。 indexBuffer是索引vertexBuffer中頂點的索引列表。

所以說我要用2個三角形在屏幕上渲染一個平面四邊形。每個三角形佔用3個頂點,所以要使用VertexBuffer渲染四邊形,我需要6個頂點。

現在,如果我使用IndexBuffer,我只需要使用4個頂點(每個角的四個頂點)。但是我需要6個索引,每個三角形有3個索引,這將索引角點頂點之一。

對於大型模型,這可以節省內存&大大提高速度,因爲GPU將處理更少的頂點。

這是一個網站,有一些很好的示例代碼:: http://www.codesampler.com/dx9src.htm 在那裏下載稱爲「索引幾何」的樣本。

+0

謝謝zezba9000。正是我需要知道的。再次感謝。 – DeadCapacitor 2011-02-03 17:29:40

20

這讓我很困惑。另一種思考方式是視覺上(我是一個大視覺思想家,所以也許這也會對你有幫助)。

擴展在zezba的例子,假設我們想用兩個三角形來繪製一個四:

Quad

當她/他指出,這可以只用四個頂點完成。所以你的頂點緩衝區將只包含四個條目。我會標註這些{A,B,C,d}:

Quad with vertices: A, B, C, D

然而,由於圖形處理器處理的三角形,我們仍然需要定義的三個頂點分組告訴GPU如何創建三角形在已經定義的頂點列表之外。這是索引緩衝區的目的。

您可以將索引緩衝區簡單地看作是指向定義三角形的頂點緩衝區的索引列表。因此,由於我們正在形成兩個三角形,並且每個三角形需要三個頂點,因此索引緩衝區將需要SIX條目。

訂購在這裏也很重要。我不會去太多,但我們只是說我想定義我的三角形逆時針。我將定義我的兩個三角形爲{B,A,C}{B,C,D}。重複使用多個三角形的頂點是完美的。

所以我最終緩衝區這樣看:

Quad with vertex and index buffers

希望這有助於。

+0

這確實有很大的幫助。謝謝,Haylwood。是的,我也是一個視覺思想家:) – DeadCapacitor 2011-02-11 23:11:13