ThreeJS 轨道控件无需 LookAt 即可设置目标

Wou*_*rgh 8 javascript orbital-mechanics perspectivecamera three.js

我正在尝试制作一个用于构建模型的 3D 查看器。我们已加载模型并尝试与模型进行某种交互。因此,我们使用 OrbiControls 来旋转、平移和缩放模型。

我们希望在查看器中具有这样的行为:当用户单击并拖动(从而旋转)时,旋转中心位于用户单击的建筑物点处。

我认为我通过改变 OrbitControl 的目标是明智的:

control.target.set(newX, newY, newZ);
Run Code Online (Sandbox Code Playgroud)

然而,我在 OrbitControl.js 文件的源代码中发现,当控件更新时,

camera.lookAt() 
Run Code Online (Sandbox Code Playgroud)

调用函数,这会导致相机跳转到新位置。

有什么办法可以解决这个问题吗?我已经尝试了几个小时了,但似乎没有任何效果。

尝试更改 target0,然后在控件上调用 Reset() 。还尝试将相机改回原来的位置(这可能是它的做法,但我可能尝试得不好。

小智 0

尝试这个:

首先将控件的位置设置为:

control.center.set(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

camera.position.copy(control.center).add(new THREE.Vector3(x, y, z+10));
Run Code Online (Sandbox Code Playgroud)

其中 x、y 和 z 是建筑模型的位置。

请注意,我已向 z 添加了 +10,以便相机位于模型的前面。将 +10 更改为其他值以接近/远离模型。