将网格切成两半 - DirectX

时间:2010-01-04 15:40:32

标签: directx mesh direct3d d3dx

我正在尝试将网格切成两半或者至少能够实时删除网格。 我怎么想这样做呢?

锁定顶点缓冲区,将选定的面或顶点memset为0,对我不起作用。 有任何解决方案或教程,我真的想在我的程序中使用此功能!

干杯

3 个答案:

答案 0 :(得分:3)

噢 - 那个很容易。无需修改网格。 D3D已经可以为您做到这一点!

通过IDirect3DDevice9::SetClipPlane设置剪裁平面,然后通过D3DRS_CLIPPLANEENABLE renderstate启用平面。如果你想要,你甚至可以同时设置多个剪裁平面。

以下是msdn-entry的链接:http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/graphics/reference/d3d/interfaces/idirect3ddevice9/setclipplane.htm

如果你在“D3D SetClipPlane”上进行谷歌搜索,你会发现很多讨论和示例代码如何使用它。

答案 1 :(得分:0)

如果您需要从网格中动态删除三角形,最好/最快的方法是使用索引三角形。创建索引缓冲区时,请使用“D3DUSAGE_DYNAMIC”标志。如果要删除三角形,请使用“D3DLOCK_DISCARD”标志将其锁定。将整个新索引列表写入缓冲区,省去要删除的三角形。

索引缓冲区将比顶点缓冲区小得多,因此仅重新上传索引不会像顶点缓冲区那样拖累系统。但是如果转换为索引三角形列表对你来说是个大问题,那么使用顶点缓冲区进行这些stame操作可能是你的下一个最佳选择。

答案 2 :(得分:0)

你说将顶点设置为0不起作用。它以什么方式起作用?

如果将三角形的所有顶点的位置设置为(0.0,0.0,0.0),则生成的三角形将为零,不应绘制。只是为了确保你可以将它设置为屏幕外位置而不是零。