我认为这个问题是不是重复,或者如果是这样,我不知道如何使这项工作。
(对不起,我伟大的绘图功能...)
我有一个球,半径0.5(因此,周界是3.1415926)。 在每个帧中,我有它在oldPosition
,我想将其放置在position
,所以,在蓝色箭头方向,由图中的V向量表示移动。 这很容易。
诀窍是,我想让球在目标位置旋转。 旋转轴线应垂直于方向(绿色虚线),和旋转在应该相对于所述物体中心(旋转将是2倍的翻译的长度)来执行。
此刻我的libgdx代码如下所示:
// During object initialization I have a Matrix4 with identify
Matrix4 rotation = new Matrix4();
// Now, this code during render()
Vector3 movement = position.sub(oldPosition);
float length = movement.len();
// drawing this on paper, it seems a correct way to compute orthogonal vector
rotation.rotateRad(new Vector3(-movement.z, 0f, movement.x), 2*length);
iSphere.transform = rotation.cpy().trn(position);
所以,基本上,我开始与识别Matrix4。 在我申请一个旋转,它每一帧,应用旋转球体,和翻译。
这似乎在第一工作(?),但很多旋转之后,球开始在错误的方向旋转。
我试着用四元数的实现,但没有运气,以及。 它应该是简单的,我忘了。