在半DirectX中切割网格

在半DirectX中切割网格,directx,mesh,direct3d,d3dx,Directx,Mesh,Direct3d,D3dx,我正在尝试将网格切成两半,或者至少能够实时删除其中的面。 我想知道该怎么做 锁定顶点缓冲区,将选定面或顶点设置为0,对我不起作用。 有人对此有解决方案或教程吗?我真的希望在我的程序中使用此功能 干杯哦,那很简单。无需修改网格。D3D已经可以为你做这件事了 通过IDirect3DDevice9::SetClipPlane设置剪辑平面,然后通过D3DRS\U CLIPPLANEENABLE渲染状态启用该平面。如果需要,甚至可以同时设置多个剪裁平面 以下是指向msdn条目的链接: 如果你在“D3D S

我正在尝试将网格切成两半,或者至少能够实时删除其中的面。 我想知道该怎么做

锁定顶点缓冲区,将选定面或顶点设置为0,对我不起作用。 有人对此有解决方案或教程吗?我真的希望在我的程序中使用此功能


干杯

哦,那很简单。无需修改网格。D3D已经可以为你做这件事了

通过
IDirect3DDevice9::SetClipPlane
设置剪辑平面,然后通过
D3DRS\U CLIPPLANEENABLE
渲染状态启用该平面。如果需要,甚至可以同时设置多个剪裁平面

以下是指向msdn条目的链接:


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

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


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

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

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