Animation 加性骨架动画

Animation 加性骨架动画,animation,Animation,我很难编写附加骨骼动画 如果我分别播放每个动画,一切都会正常工作,这样我就知道每个动画的姿势都是正确的。。。我搞不懂的是如何将它们混合在一起 我得到以下信息: void MD5ANIM_additive_blending( MD5MD5ANIM *md5, MD5MD5ANIMJOINT *dst, MD5MD5ANIMJOINT *pose0, MD5MD5ANIMJOINT *pose1 ) { unsigned int i = 0; while( i != md5->n_joint

我很难编写附加骨骼动画

如果我分别播放每个动画,一切都会正常工作,这样我就知道每个动画的姿势都是正确的。。。我搞不懂的是如何将它们混合在一起

我得到以下信息:

void MD5ANIM_additive_blending( MD5MD5ANIM *md5, MD5MD5ANIMJOINT *dst, MD5MD5ANIMJOINT *pose0, MD5MD5ANIMJOINT *pose1 )
{
unsigned int i = 0;

while( i != md5->n_joint )
{
    vec3 location;

    quat4 quaternion;

    // The joints location difference
    vec3_subtract( &location, &pose1[ i ].location, &pose0[ i ].location );

    // Add the joint location difference to the first pose to create additive new pose.
    vec3_add( &dst[ i ].location, &pose0[ i ].location, &location );


    // The quaternion difference
    quat4_subtract( &quaternion, &pose0[ i ].quaternion, &pose1[ i ].quaternion );

    // Add the joint quaternion difference to the first pose to create additive new pose.
    quat4_add( &dst[ i ].quaternion, &pose0[ i ].quaternion, &quaternion );

    quat4_normalize( &dst[ i ].quaternion,
            &dst[ i ].quaternion );

    ++i;
}
}
任何人都可以指出我哪里弄错了。据我所知,添加到骨骼姿势的混合非常简单:

附加姿态=位置0+(位置0-位置1)

我做错了什么


假设您有一个行走动画,另一个手悬空。所以基本上步行+手=手在空中行走

有两种可能性:

  • 行走动画不会影响与手动画相同的骨骼

  • 行走动画影响的骨骼与手动画影响的骨骼相同

  • 案例1 在这种情况下,您有两种选择。您的姿势结构可以有一个位字段,告诉您是否有特定的骨骼在其中。因此,您可以通过查看哪个姿势包含另一个姿势不提供的骨骼来组合两个姿势

    如果没有位字段或其他信息说明姿势是否实际包含骨骼数据,则可以执行此操作。不在动画中的姿势的任何骨骼都应为标识。因此,可以通过四元数乘法将两个姿势的骨骼相乘

    案例2 由于两个动画之间存在重叠,因此必须有人获胜。基本上,您必须知道分层动画具有哪些骨骼,并将来自较低姿势的数据替换为来自较高姿势的数据


    你发布的代码乱七八糟。通常,如果您有两个方向四元数,并且认为添加/减去它们是一个好主意,那么您要么正在进行一些复杂的优化(在这种情况下,您知道自己在做什么),要么正在做一些非常错误的事情。

    将一帧动画与另一帧动画进行添加混合意味着什么?你想达到什么样的视觉效果?假设你有一个行走动画,另一个手悬空。所以基本上走路+手=手在地上走路air@datenwolf:你能用代码详细说明一下吗?tks@麦克鲍伯:看尼科尔·博拉斯的答案。一般来说,如果你有两个方向四元数,你不应该像矢量一样加上或减去它们,而应该使用插值法在它们之间进行插值。