Загрузка анимации суставов Collada? - PullRequest
3 голосов
/ 26 января 2012

У меня проблемы с загрузкой информации о соединениях из узла 'animation' файла collada.

Сначала я пытаюсь загрузить соединения из 'library_visual_scenes':

Первые два вида соединенийвот так:

<visual_scene id="" name="">
    <node name="joint1" id="joint1" sid="joint1" type="JOINT">
        <translate sid="translate">0.000000 -2.000000 0.000000</translate>
        <rotate sid="jointOrientZ">0 0 1 90.000000</rotate>
        <rotate sid="rotateZ">0 0 1 0.000000</rotate>
        <rotate sid="rotateY">0 1 0 0.000000</rotate>
        <rotate sid="rotateX">1 0 0 0.000000</rotate>
        <scale sid="scale">1.000000 1.000000 1.000000</scale>
        <extra>
        <node name="joint2" id="joint2" sid="joint2" type="JOINT">
            <translate sid="translate">2.000000 0.000000 0.000000</translate>
            <rotate sid="rotateZ">0 0 1 0.000000</rotate>
            <rotate sid="rotateY">0 1 0 0.000000</rotate>
            <rotate sid="rotateX">1 0 0 0.000000</rotate>
            <scale sid="scale">1.000000 1.000000 1.000000</scale>
            <extra>

, что прошло хорошо!

Суставы майя:

http://www.hostingpicture.fr/upload/c3eaf96247e99b90f9087b2d37fb509f.PNG

Мои суставы:

Яхотел бы поставить фотографию, но как новый участник, я не допускается.В этом случае вы должны будете мне доверять, в моем движке соединения находятся в том же месте, что и в Maya.

Затем я пытаюсь загрузить соединения из узла 'animation'.Вот проблема, я не могу найти какого-либо совместного объекта.

<animation id="joint1-anim" name="joint1">
<animation>
    <source id="joint1-translate.Y-output">
        <float_array id="joint1-translate.Y-output-array" count="2">-2.000000 -2.000000</float_array>
<animation>
    <source id="joint1-rotateZ.ANGLE-output">
        <float_array id="joint1-rotateZ.ANGLE-output-array" count="2">0.000000 0.000000</float_array>

<animation id="joint2-anim" name="joint2">
<animation>
    <source id="joint2-translate.X-output">
        <float_array id="joint2-translate.X-output-array" count="2">2.000000 2.000000</float_array>

Итак, после загрузки соединений они выглядят так:

http://www.hostingpicture.fr/image.php?nom=upload/b26b6f8ed80f2bcdb69645d400ac023d.png

Кто-нибудь может здесьпомогите?

Спасибо.

(Извините, у меня нет более 10 репутаций, я не могу размещать фотографии.)

1 Ответ

3 голосов
/ 19 февраля 2012

Я наконец-то разобрался с ответом, для тех, кому это может быть интересно.

Узел visual_scene от collada даст вам позу для ваших суставов. Итак, я собираюсь загрузить координаты visual_scene в структуре:

Примерно так:

struct Pose
{
    vec3    translation,
            orientation,
            rotation,
            scale;
};

Pose    bind_pose;

Затем я собираюсь создать еще один экземпляр структуры "Pose", с конструктором, который принимает Pose в качестве параметра:

Pose    anim_pose(bind_pose);

Итак, после построения bind_pose из visual_scene и anim_pose совпадают.

Затем я собираюсь перебрать все узлы анимации в library_animations, найти канал и поинтересоваться:

  • исходные данные, которые сообщают, где найти информацию о совместных анимациях ("n" float (s) для "n" анимации (s):))
  • и целевой сустав.

    <channel source="#joint1-translate.X" target="joint1/translate.X"></channel>
    

Это говорит нам (и вот где я немного растерялся), что мы собираемся ЗАМЕНИТЬ целевое значение исходным значением.

Если исходные данные найдены в канальном узле, совпадают с целевыми данными, т.е. :

bind_pose.translation.x имеет -3.0 в качестве значения после загрузки данных visual_scene и

<source id="joint1-translate.X-output">
    <float_array id="joint1-translate.X-output-array" count="1">-3.000000</float_array>

Я ничего не делаю.

Если исходные данные отличаются от целевых данных, я просто заменяю в anim_pose хорошим значением.

И это почти все, что вам нужно сделать, чтобы правильно загрузить анимированные суставы из коллады.

Если вы видите здесь что-то не так, пожалуйста, скажите мне.

Надеюсь, это поможет.

...