3

我已经能够使用我自己编写的 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 加载了它,只是为了看到它实际被渲染并且工作正常。任何人都可以向我解释在上述情况下我应该做什么。谢谢

4

1 回答 1

6

COLLADA 规范中,它说<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 搜索更多节点。

于 2012-05-11T16:33:30.387 回答