我有一个服务器和一个客户端。我有 40 个 opengl 立方体。状态由位置的 3d 向量和 3x3 旋转矩阵(或四元数)描述。
如何发送中间数据包并在这些数据包之间预测客户端上的对象状态(外推)?
对于物体位置,我可以使用速度的线性预测器。如何预测四元数状态?
我有一个服务器和一个客户端。我有 40 个 opengl 立方体。状态由位置的 3d 向量和 3x3 旋转矩阵(或四元数)描述。
如何发送中间数据包并在这些数据包之间预测客户端上的对象状态(外推)?
对于物体位置,我可以使用速度的线性预测器。如何预测四元数状态?
与您对线速度所做的平行的最简单的事情是使用角速度的线性预测器。
如果您有两个四元数q_0和q_t,表示相隔t秒的全局方向,您可以计算两个四元数之间的有限差并使用它来找到可用于外推的角速度。
如果m足够大,那么我们只需找到角速度:
v = 2asin(m)[dq.x,dq.y,dq.z]/(m*t)
但是,如果m不够大,我们将面临试图除以接近零的数字问题。因此,程序员将使用 sinc() 函数在零附近的泰勒展开,这在这种情况下恰好非常准确。请记住m = sin(Θ/2)。使用m<1e-4,我们可以准确计算asin(m)/m = 6/(6-m*m)。然后,您只需将结果乘以2*[dq.x,dq.y,dq.z]/t 即可获得角速度。 呸。
然后,外推就是将您的角速度乘以经过的时间。然后你往回走,将角度变化转换为四元数并将其乘以q_t。
似乎必须有一个更简单的方法......