您的问题有几种解决方案。一种是为您的相机实现一种带有真实或虚拟墙壁的碰撞检测,从而停止旋转。但是,我猜您正在寻找更容易实现的东西。
由于我不是很了解 Three.js,所以我会为您提供一个通用的解决方案,但它应该很容易适应 Three.js。
第一件事是不要使用内置的 Three.js 轨道控制,而是实现你自己的,在那里你控制你所有的变换。而且,这实际上非常容易。
要创建一个可轨道摄像机,你只需要 crate:
一旦你有了这个,你只需将相机作为“null”对象的父级。现在以“null”对象为父,如果旋转“null”对象,则旋转相机。然后到轨道,您现在必须将相机从父对象移回:
Null Camera
+ - - - - - - - - - |>
像这样,“null”对象成为相机“看点”,如果您围绕 Y 旋转“null”对象(我相信 Three.js 使用 Y),您可以控制相机方位角。如果您在 X 或 Z(取决于坐标系)中旋转“空”对象,您将控制相机高度。然后,您甚至可以通过在其局部 Z 轴上移动相机来控制相机向前向后靠近“观察点”。
好吧,你现在有了一个易于控制的轨道相机。但是您的问题尚未解决:如何在每个相机初始方向上使这个控制 Pi / -Pi 成为可能?
简单:您创建第二个“空”变换对象,将其命名为“socle”,并将第一个对象作为最后一个对象的父对象:像这样,相机“看点”的旋转始终是局部的,您现在可以旋转“the socle”,为您的“Orbital camera”组提供世界空间中的初始方向。
实际上,这很像创建虚拟云台。我希望我很清楚,有了图片,这将更容易可视化......