我有两个不同的threejs场景,每个场景都有自己的相机。我可以使用相应的TrackballControls实例分别控制每个摄像机。

是否存在将这些控件“锁定”或“绑定(bind)”在一起的可靠方法,以便操纵其中一个导致同一摄像机在另一个摄像机中重新定位?我目前的方法是将change监听器添加到控件中,并将两个摄像头都更新为其中一个更改,但这并不是很整洁,因为一个控件可以同时更改两个控件(由于阻尼)。

最佳答案

我认为,如果将第二个摄像机的矩阵设置为第一个摄像机的值并禁用两个摄像机的自动矩阵更新,则它应该可以工作:

camera2.matrix = camera1.matrix;
camera2.projectionMatrix = camera1.projectionMatrix;
camera1.matrixAutoUpdate = false;
camera2.matrixAutoUpdate = false;

但是现在您需要在renderloop中手动更新矩阵:
camera1.updateMatrix();

该调用将获取positionrotationscale的值(已由控件更新),并将它们组成camera1.matrix,之前的每个分配也用作第二台摄像机的矩阵。

但是,这感觉有些棘手,并且可能导致各种奇怪的问题。我个人可能会更喜欢您已经实现的更明确的方法。

问题是,为什么还要使用两个相机和控件实例?只要不将摄像机添加到场景中,就可以使用同一台摄像机渲染两个场景。

关于three.js - 使用相同的控件控制多台摄像机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38579626/

10-12 12:59