анимация коллады с несколькими скелетами

Мне удалось загрузить статическую геометрию с помощью моего собственного загрузчика для коллады, который я написал. Однако следующим шагом будет добавление анимации. Проблема, с которой я сталкиваюсь, заключается в том, что делать, когда 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, чтобы убедиться, что он действительно отображается и работает нормально. Может ли кто-нибудь объяснить мне, что я должен делать в вышеуказанной ситуации. Спасибо


person Chris Condy    schedule 11.05.2012    source источник


Ответы (1)


В спецификации 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.

person jterrace    schedule 11.05.2012
comment
Большое спасибо! Я разместил это на нескольких других веб-сайтах, я свяжу их с вашим ответом. - person Chris Condy; 12.05.2012