我的程序中的骨骼动画工作正常,但是我在为每个骨骼存储的4x4矩阵之间以线性方式在帧之间进行插值,即
bMatrix bMathbMathInterpolate(bMatrix const * const p_a,bMatrix const * const p_b, float p_delta)
{
bMatrix l_mat;
for(unsigned char i = 0;i lessthan (edit: sorry less than symbol break it) 16;i++)
l_mat.m_values[i] = bMathInterpolate(p_a->m_values[i], p_b->m_values[i], p_delta);
return l_mat;
}
除非矩阵中有大量旋转,否则这是可以的 - 模型在关键帧之间略微挤压。
因此,我制作了一个单独的插值算法,仅将4x4矩阵的旋转部分转换为四元数,执行 SLERP,并仅将矩阵的旋转部分替换为四元数的矩阵版本。对于矩阵的平移部分,我只是以线性方式对其进行插值。
看结果,这显然是错误的!!!:'(
如果你非常了解这一切(不像我自己),你可能会想“不!这不是你做的!” - 如果是这样,请告诉我我做错了什么!
我不知道如何处理矩阵的翻译部分,因为我只能找到告诉你如何在四元数和3x3矩阵之间来回转换的资源。
任何帮助都感激不尽!!!!