Math 具有多个权重的双四元数蒙皮

Math 具有多个权重的双四元数蒙皮,math,3d,quaternions,Math,3d,Quaternions,我正在从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)。我不知道

我正在从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)