2010-01-04 80 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),则生成的三角形将为零大小,不应绘制。只是为了确保你可以将它设置为离屏位置而不是零。