我已经能够使用我自己的装载器为我写的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加载它只是为了看到它实际呈现并且工作正常。任何人都可以向我解释在上述情况下我应该做些什么。感谢
答案 0 :(得分:6)
在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
的节点。例如,对于上面的控制器,指向的节点如下所示:
<node id="Skeleton1" sid="Root">
<node sid="Spine1">
<node sid="Spine2">
<node sid="Head"/>
</node>
</node>
</node>
控制器中的每个联合名称对应于具有该sid值的节点。如果您有多个骨架标记,则只需要搜索给定sid的更多节点。