我有一台服务器和一台客户端。 我有40个opengl立方体。状态由3d矢量描述位置和3x3旋转矩阵(或四元数)。
如何在这些数据包之间发送中间数据包并预测客户端上的对象状态(外推)?
对象位置我可以使用速度的线性预测器。 如何预测四元数状态?
答案 0 :(得分:0)
与线速度相关的最简单的事情是使用线速度的线性预测器。
如果你有两个四元数, 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 。
似乎必须有一种更简单的方法......