为什么四元数旋转有一半的时间在看其他东西



请参阅随附的Xcode/Metal示例代码和我遇到的问题的视频。

我想让一个移动的物体看一个点,这在一半的时间里有效,但在另一半的时间,物体在看其他东西。

我使用四元数进行旋转。

所以我的问题是,为什么会发生这种情况,我该如何解决?

非常感谢代码示例。

mutating func calculateGizmo()
{
time += 0.03
let position: float3 = [0,
0 + cos(time * 0.7) * 4,
0 + sin(time * 0.9) * 4]
gizmo.position = position
let lookAtMat4x4 = float4x4(eye: position, center: [0, 0, 0], up: [0, 1, 0])
gizmo.transform.quaternion = simd_quatf(lookAtMat4x4)
}

视频

代码

我试图让一个物体看起来像一个点,并期望它一直这样做。但当它在三维空间中移动时,只有一半的时间会这样做。

据我所见,它似乎在做正确的事情。您要求lookat函数忽略x轴的存在,因此您已将其约束为仅在YZ平面内工作。结果如预期。

换言之,当位置位于点(0,0,0(正下方时,您要求它将Z轴指向(0,1,0(的方向,同时要求它忽略这一点,方法是将Y轴与上轴(0,1,0(聚焦。所以,是的,它只是试图保持你给它的限制。

从声音上看,考虑到你试图约束YZ平面中的旋转,你似乎想保持(1,0,0(或(-1,0,0(的上轴?

相关内容

最新更新