我有一个以球体表面上的一个点为中心的3D摄像头。它遵循并完美地旋转,除了在球体的两极之外。请注意,球体实际上是投影到球体的立方体,以便于位置坐标的管理。摄像头看着一个球体 - 杆子包裹
如果对象在球体周围水平移动,则摄像机按预期工作。但是,如果物体穿过球体的顶部或底部的极点,则摄像机会缠绕在极点上。如果它直线穿过杆子,它会在穿过杆子时转动180度。
我明白为什么会发生这种情况 - 必须有一个全局的Up向量才能知道如何定位自己。如果我将其向上方向更改为不同的方向,例如右侧,相机将不再翻转顶部或底部的杆,而是在球体的左右两极展现相同的行为。
我的问题是如何改变我的相机的行为,这样就不会发生。我想让我的相机感觉到,相机处于一个恒定的位置,看着球体,球体在X轴和Z轴上旋转。我知道这可能导致“错误的”方向 - 例如,如果用户从球体的前表面开始,向上,然后离开,它们将最终在球体的左侧,但是相机在其Z轴上旋转90度,而如果它们从前面开始并直接移动到左侧,则不会旋转。这很好,因为我可以检测相机何时穿过脸部并缓慢“修复”相机的本地旋转,或允许用户解锁相机,并且可以自己处理相机的角度。
仅供参考,我的相机是目前正在使用中这个问题的解决计算: Camera rotation aligned to arbitrary plane
任何有识之士将不胜感激!
看看SketchUp的旋转模型。当你穿过两极时,它们会反转向上的方向。 – 2013-03-26 14:01:53
你如何做球体周围的旋转?矩阵或四元数? – Kobunite 2013-03-26 14:30:43