我正在从一个 cg 软件中导入动画网格,该软件每个顶点使用 3 个权重进行蒙皮。每一个都加权其他旋转轴(X、Y 和 Z)。它创造了非常令人信服的效果,我想在我的应用程序中在 GPU 上实时实现这一点。
目前我对动画使用双四元数,我想用这三个权重而不是一个权重来加权它们。一开始它看起来很简单——只需使用这三个权重对 i、j 和 k(或着色器符号中的 x、y、z)分量进行加权:
q.x *= weight.x
q.y *= weight.y
q.z *= weight.z
但问题在于实分量(w)。我不知道如何正确称重。
我尝试将它乘以所有三个权重的平均值,但它给了我奇怪的结果:
q.w *= (weight.x + weight.y + weight.z) / 3
通过围绕轴的旋转加权平均,可以完美地工作,但只能围绕一个轴旋转。当同时围绕 2 个或 3 个轴进行非零旋转时,它在视觉上会给出完全错误的结果。
q.w *= (weight.x * q.x + weight.y * q.y + weight.z * q.z) / (q.x + q.y + q.z)