2010-01-04 49 views
3

我試圖將網格切割成一半,或者至少能夠實時刪除它。 如何去做這個我想知道?將網格劃分爲一半 - DirectX

鎖定頂點緩衝區,將選定的面或頂點的memset設置爲0,不適用於我。 有任何人有解決方案或教程,我真的想在我的程序中使用此功能!

乾杯

回答

2

噢 - 一個很容易。沒有必要修改網格。 D3D已經可以爲你做這個了!

通過IDirect3DDevice9::SetClipPlane設置剪切平面,然後通過D3DRS_CLIPPLANEENABLE renderstate啓用平面。如果你願意,你甚至可以在同一時間設置多個夾子平面..

這裏是一個鏈接到MSDN條目:http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/graphics/reference/d3d/interfaces/idirect3ddevice9/setclipplane.htm

如果你這樣做的「D3D SetClipPlane」谷歌搜索你會發現很多討論和示例代碼如何使用它。

0

如果您需要動態刪除網格中的三角形,最好/最快的方法是使用索引三角形。當您創建索引緩衝區時,使用'D3DUSAGE_DYNAMIC'標誌。當你想刪除三角形時,用'D3DLOCK_DISCARD'標誌鎖定它。將整個新的索引列表寫入緩衝區,而忽略要刪除的三角形。

索引緩衝區將比頂點緩衝區小得多,因此只重新上傳索引不會像頂點緩衝區那樣大。但是,如果將它轉換爲索引三角形列表是一個大問題,那麼使用頂點緩衝區來執行這些stame操作可能是您的下一個最佳選擇。

0

你說設置頂點爲0不起作用。它以什麼方式不起作用?

如果您將三角形的所有頂點的位置設置爲(0.0,0.0,0.0),則生成的三角形將爲零大小,不應繪製。只是爲了確保你可以將它設置爲離屏位置而不是零。