我有一个 Viewport3DX 绑定到一个 ModelGroup(这是一个 SceneNodeGroupModel3D)。就我而言,我必须导入 .obj 文件作为 SceneNode,并使用函数 ModelGroup.AddNode(node) 将其添加到 ModelGroup。我按如下方式操作:
var importer = new Importer();
HelixToolkitScene scene = importer.Load("PathToTheModel");
ModelGroup.AddNode(scene.Root)
但是一旦我尝试添加相同的场景节点(因为我想导入相同的模型,但然后将其放置在不同的位置),它就不起作用。事实上,第二个
ModelGroup.AddNode(scene.Root)
将返回 false,因为我们在 SceneNodeGroupModel3D 中已经有了这样的 SceneNode。
我找到的解决方案是再次使用导入器,但我觉得这不是正确的方法,因为一旦我加载了模型,重新加载它就没有意义了,对吗?
据我所知,当您使用导入器时,SceneNode 会链接到一个新的 GUID(全局唯一标识符),并且函数
.AddNode()
检查 SceneNodeGroupModel3D 的现有节点,如果匹配,则忽略该命令。然后,如果使用相同的 scene.Root
,只需添加一个,如果我导入两次,我就能够在组中获得两个相同的模型,但具有不同的 GUID。
那么,问题是如何添加到 SceneNode 并克隆到同一个 SceneNodeGroupModel3D?我不介意它是否修改 GUID、克隆整个 SceneNode 或您可能建议的任何解决方法。对于这个例子来说可能不是问题,但想象一下,如果我们有 1 个模型但 100 次,那么一直导入和加载相同的模型会浪费资源。
提前致谢!
我也有同样的问题,请问你找到答案了吗?