2009-10-13 76 views

回答

5

您可以將多個網格物體存儲在一個頂點緩衝區中。通過在一個緩衝區中放入幾個小網格物體,可以獲得一些性能。對於真正大的網格,你應該使用單獨的緩衝區。 SetStreamSource可讓您指定當前網格的頂點緩衝區偏移量。

pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride()); 
-2

使用OpenGL,您可以使用glVertexPointer()開始從VBO內部的某個偏移量開始繪製。不確定D3D。

2

TBH通常把它們放在一個大緩衝區的原因是爲了節省繪製調用。切換頂點緩衝區的開銷非常小。如果您可以將它們全部合併到一個頂點緩衝區中,並在1中繪製10個對象,則您將獲得一場大勝。

通常要將它們合併,您只需創建一個大頂點緩衝區,並將所有頂點數據一個接一個地轉換成已經世界變換的頂點數據。然後設置一個索引緩衝區,使它們一個接一個地呈現。然後你可以用最小的平局調用畫出一切。當然,如果你移動一個需要更新頂點緩衝區的一部分,這就是爲什麼它是靜態幾何的理想情況。

如果所有的對象都是相同的,那麼您將只使用1個頂點緩衝區(其中有1個對象定義)和1個索引緩衝區?矩陣移動或動畫的對象...

如果所有的對象是不同的和移動/動畫,然後我只是堅持個人VBs。我懷疑你會注意到它們之間的區別。

0

嗯,我的經驗是,只要你的緩衝區不是真的很小或真的很大,它並沒有太大的區別。我懷疑,開關緩衝器中的任何低效率都可以通過提高驅動器的效率來提高驅動器的操作性,以便通過更小的緩衝器來管理內存。

相關問題