3

colladaファイルの「animation」ノードからジョイントデータ情報をロードするのに問題があります。

まず、'library_visual_scenes'からジョイントをロードしようとします:

最初の2つのジョイントは次のようになります。

<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

私の関節:

写真を載せたいのですが、新会員としては入場できません。この場合、私を信頼する必要があります。私のエンジンでは、ジョイントはマヤと同じ場所にあります。

次に、「アニメーション」ノードからジョイントをロードしようとします。ここに問題があります。jointOrientが見つかりません。

<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を超えていないので、申し訳ありませんが、写真を掲載することは許可されていません。)

4

1 に答える 1

3

興味があるかもしれない人のために、私はついに答えを見つけました。

colladaのvisual_sceneノードは、関節のバインドポーズを提供します。だから、私は構造体にvisual_sceneジョイント座標をロードするつもりです:

そんな感じ :

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

Pose    bind_pose;

次に、Poseをパラメーターとして受け取るコンストラクターを使用して、「Pose」構造体の別のインスタンスを作成します。

Pose    anim_pose(bind_pose);

したがって、構築後、visual_sceneのbind_poseとanim_poseは同じです。

次に、library_animationsのすべてのアニメーションノードを繰り返し処理し、チャネルを見つけて、次のことに興味を持ちます。

  • ジョイントアニメーション情報の場所を示すソースデータ(「n」アニメーションの場合は「n」float(s):))
  • とターゲットジョイント。

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

これは、ターゲット値をソース値に置き換えることを示しています(そしてそれは私が少し迷ったところです)。

チャネルノードで見つかったソースデータがターゲットデータと同じである場合、つまり。:

bind_pose.translation.xは、visual_sceneデータをロードした後の値として-3.0を持ち、

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

私は何もしません。

ソースデータがターゲットデータと異なる場合は、anim_poseを適切な値に置き換えるだけです。

そして、colladaからアニメーション化されたジョイントを適切にロードするために必要なことはほとんどすべてです。

ここで何か問題があれば教えてください。

これがお役に立てば幸いです。

于 2012-02-18T22:58:44.333 に答える