2012-11-14 64 views
3

我正在寫C++中的一個類來處理繪製3D模型(即三角形網格),我想知道如何最好地組織我的數據緩衝區。OpenGL交錯索引數組

這是我目前所知:

  • 使用交錯陣列加快代碼。它利用空間局部性並增加緩存命中。您可以通過組織頂點到struct s來實現這一點,其中每個struct都包含position/normal/texcoord/etc。該頂點的信息。

  • 使用索引數組通過存儲每個不同的頂點/ normal/texcoord /等來減少內存消耗。只有一次,然後通過對這些數組的引用來定義面部,而不是冗餘地爲每個面部指定所有信息。你也可以實現這與指數的struct成頂點屬性的列表。

我的問題:我應該如何最好地利用這兩種呢?可以做到兩者嗎?我聽說你們都應該儘可能地使用它們,但是沒有發現任何關於同時使用它們或者一個使用它們的問題。

我最初的解決方案:我打算實現一個結構,它在數據數組中包含索引,並將這些結構的數組以及數據陣列作爲VBO傳遞,實質上將兩者結合起來。

我在正確的軌道上嗎?有一個更好的方法嗎?我該做什麼/不該做什麼?有什麼我似乎不知道會影響這個決定?

+0

三角形條+一些訂單優化如何http://rosario3d.wordpress.com/2011/06/19/triangle-render-order-optimization/? – JAre

+0

[工具](http://users.telenet.be/tfautre/softdev/tristripper/vs_nvtristrip.htm) – JAre

回答

5

使用交錯數組和索引實際上沒有關係。同時做兩件事是可能的,因爲它們彼此之間並沒有多大關係。

如果您想要將單個緩衝區中的VTNVTNVTN ...(頂點,紋理,正常)頂點打包,或者將VVV,TTT,NNN打包在單獨的緩衝區中,只需使用交錯數組即可。

使用索引只是一個決定,如果你有足夠的重複頂點證明使用索引緩衝區。當做出這個決定時,如果你已經交錯了頂點,那麼它幾乎是無關緊要的。

我的初始溶液:我要實現一個結構即有索引到數據陣列和通過這些結構的數組,以及數據陣列,維也納各組織,基本上兩者結合。

這是違法的。請注意,您沒有得到指數,您只能獲得一個索引。您不能在對texcoord#1進行採樣的同時對頂點#0進行採樣。您提供的單個索引是所有緩衝區的索引。

我懷疑這就是爲什麼你最初感到困惑,因爲你認爲你可以有多個指數。