请参阅随附的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(的上轴?