3ds Max C ++插件修改器 - 为修改器保存拓扑数据

时间:2014-05-19 22:28:40

标签: c++ 3dsmax

现在我正试图找到一种方法来避免在制作动画时每帧都重建我的MNMesh拓扑。每次我在ModifyObject中开始时,我都会得到一个新的网格,它已被任何东西所触及,然后我在我的修改器中进行了细分。一旦完成并返回到我的修改器以进行另一次传递,我将原始网格未经修改。

我想要做的是将修改器中的指针保存到Face数据和Mapping数据中。如果没有拓扑或我的修饰符设置发生变化,我想重用那些指向该数据的指针。这将提高性能,因此唯一需要更新的是我的顶点数据。

问题是当我的修改器完成时3ds max会清理MNMesh的Face数据和Mapping数据。指针最终指向gargbage数据。

有没有办法阻止每次调用修改器时删除面部和地图数据?

谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

我最终找到了自己修复的方法......

现在在PolyObject上我为TriObject调用ConvertToType并存储它,因为它创建了一个新对象,而不是只给我一个指向旧对象的指针(Max不会删除它)。然后在下一个循环中我检查是否有任何变化,如果没有,那么我在3ds传入的对象上调用FreeChannels,用于我传入的通道。然后我在相同的通道上使用ShallowCopy,但这只会创建指向传入的对象信息将在传递给Max时被删除。在ShallowCopy之后阻止删除我在那些通道上调用NewAndCopyChannels,这些通道会给那些指针指向他们自己的数据,因此我的存储对象不会被删除。

所以现在解决了我遇到的问题,我不确定我是否会遇到与此更改相关的任何其他内容,但那是我需要的优化修复。