我无法从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>
进展顺利!
Maya关节:
我的关节:
我想拍一张照片,但作为新成员,我不被允许。在这种情况下,你必须相信我,在我的引擎中,关节与maya在同一个地方。
然后,我尝试从“动画”节点加载关节。这是问题,我找不到任何jointOient。
<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>
因此在加载关节后,它们看起来像这样:
这里有人可以帮忙吗?
感谢。
(对不起,因为我没有超过10个声誉,我不允许放照片。)
答案 0 :(得分: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和anim_pose的bind_pose是相同的。
然后我将遍历library_animations中的所有动画节点,找到频道并感兴趣:
和目标关节。
<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正确加载动画关节的所有工作。
如果您在此处看到任何错误,请告诉我。
希望这会有所帮助。