2012-05-11 43 views
3

我已经能够使用我自己的加载程序加载我编写的collada的静态几何。但下一步是添加动画。我遇到的问题是当一个instance_controller有多个骨架时会发生什么。在我目前的模型中,我试图加载被引用的每个节点都引用每个关节。例如具有多个骨架的collada动画

<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加载它只是为了看到它实际渲染和工作正常。有人可以向我解释我在上述情况下应该做什么。由于

回答

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>,要应搜索与每个关节名的sid节点<skeleton>点。例如,对于上述的控制器,所述节点指向看起来像这样:

<node id="Skeleton1" sid="Root"> 
    <node sid="Spine1"> 
    <node sid="Spine2"> 
     <node sid="Head"/> 
    </node> 
    </node> 
</node> 

在控制器每个接头名称对应于与该SID值的节点。如果你有多个骨架标签,这意味着你需要为给定的sid搜索更多的节点。

+0

非常感谢!我已经在其他几个网站上发布了这些内容,我会将它们链接到您的回复。 –

+0

没问题,祝你好运! – jterrace