我正在尝试将网格切成两半或者至少能够实时删除网格。 我怎么想这样做呢?
锁定顶点缓冲区,将选定的面或顶点memset为0,对我不起作用。 有任何解决方案或教程,我真的想在我的程序中使用此功能!
干杯
答案 0 :(得分:3)
通过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),则生成的三角形将为零,不应绘制。只是为了确保你可以将它设置为屏幕外位置而不是零。