gpt4 book ai didi

c++ - SLERP & 骨骼动画插值帮助!

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:42 25 4
gpt4 key购买 nike

我的程序中的骨骼动画运行良好,但我在为帧之间的每个骨骼存储的 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 矩阵之间来回转换的资源。 p>

任何帮助将不胜感激!!!!

最佳答案

你应该可以将矩阵的平移分量转换为 vector ,然后对它们进行线性插值,然后将旋转分量转换为四元数,并对它们进行slerp(或lerp,或nlerp),然后重新组合结果 vector 和四元数返回矩阵。

关于c++ - SLERP & 骨骼动画插值帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com