xcode 为什么四元数旋转有一半的时间在看别的东西?

7rtdyuoh  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(142)

请参见所附的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)
    }

Video
Code
我试着让一个物体看向一个点,并期望它一直这样做,但是当它在三维空间中运动时,它只做了一半的时间。

hof1towb

hof1towb1#

从我所看到的来看,它似乎做了正确的事情。您要求lookat函数忽略x轴的存在,因此您将其约束为仅在YZ平面内工作。然后,结果与预期一致。
换句话说,当位置在点(0,0,0)的正下方时,你要求它将Z轴指向(0,1,0)的方向,同时要求它忽略这个方向,将Y轴聚焦到(0,1,0)的上轴。所以,是的,它只是试图保持你给它的约束。
听起来,如果您尝试将旋转约束在YZ平面中,您可能希望将上轴保持为(1,0,0)或(-1,0,0)。

相关问题