我已经能够使用我自己编写的 collada 加载器加载静态几何图形。然而下一步是添加动画。我遇到的问题是当 instance_controller 有多个骨架时该怎么办。在我当前的模型中,我试图加载每个被操纵的节点都引用了每个关节。例如
<instance_controller url="#geom-Cylinder018-skin1">
<skeleton>#node-Bone024</skeleton>
<skeleton>#node-Bone020</skeleton>
<skeleton>#node-Bone016</skeleton>
<skeleton>#node-Bone009</skeleton>
<skeleton>#node-Bone005</skeleton>
<skeleton>#node-Bone001</skeleton>
<skeleton>#node-Bone025</skeleton>
我不确定我应该用这个做什么?目前我正在将它们全部链接到 visual_scene 中的正确节点。然而,模型中的每个节点都做你在上面看到的!我使用 AssimpView 加载它只是为了查看它是否实际呈现并且工作正常。任何人都可以向我解释在上述情况下我应该做什么。谢谢
最佳答案
在 COLLADA spec 中,它表示 <skeleton>
下的 <instance_controller>
:
因此,在 instance_controller 中有多个骨架指针只是意味着应该在指向的节点中搜索正确的关节节点。 <controller>
本身会告诉您哪些节点应该用于关节。它将有一个看起来像这样的源:
<library_controllers>
<controller id="skin">
<skin source="#base_mesh">
<source id="Joints">
<Name_array count="4"> Root Spine1 Spine2 Head </Name_array>
...
</source>
...
</controller>
</library_controllers>
<node>
指向的 <skeleton>
应该搜索每个关节名称的 sid
的节点。例如,对于上面的 Controller ,指向的节点是这样的:<node id="Skeleton1" sid="Root">
<node sid="Spine1">
<node sid="Spine2">
<node sid="Head"/>
</node>
</node>
</node>
Controller 中的每个关节名称都对应于具有该 sid 值的节点。如果您有多个骨架标签,则仅意味着您需要为给定的 sid 搜索更多节点。
关于animation - 带有多个骨架的 collada 动画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10554881/