如何使用轨道控件添加其他摄像头?

时间:2019-02-19 17:15:14

标签: javascript three.js camera

我所拥有的:

请注意,这里有两台摄像机(一个显示在3D空间中,另一个正在记录该特定空间)。我使用下面的代码创建第一个/第二个摄像头和轨道控件。

enter image description here

//Add First THREE Camera
camera_Main = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
camera_Main.position.set(-2000, 500, 500); //Set camera position
camera_Main_declared = true; //Checks if camera is declared for animate() function

orbitController_Main = new THREE.OrbitControls(camera_Main, renderer_Main.domElement);
orbitController.maxPolarAngle = Math.PI / 2;  
orbitController.enablePan = false;
orbitController.maxDistance = 2800;
orbitController.minDistance = 400;
orbitController.saveState();

//Create Second Camera
camera_RT = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, -100, -500);
var helper = new THREE.CameraHelper( camera_RT );
scene_Main.add( helper );    

问题:

我想做的是为轨道控制器设置不同的摄像头,以便在我打电话时使用:

orbitController.?????????? // Set camera_RT as default
orbitController.reset(); //Reset camera_RT orbit controls

它将重置 camera_RT 而不是 camera_Main 的轨道控制。

1 个答案:

答案 0 :(得分:1)

在两个摄像机之间交替控制的最简单方法是只声明两个单独的OrbitControls(),然后根据需要启用/禁用它们:

var oControl_Main = new THREE.OrbitControls(camera_Main, renderer_Main.domElement);
var oControl_RT = new THREE.OrbitControls(camera_RT, renderer_Main.domElement);

// Only main camera is enabled
function enableMain() {
    oControl_Main.enabled = true;
    oControl_RT.enabled = false;
}

// Swap control to RT camera
function enableRT() {
    oControl_Main.enabled = false;
    oControl_RT.enabled = true;
}

交换控制权的一种更复杂的方法是复制OrbitControls.js的源代码,以便您可以对其进行编辑,并添加一种更改this.object = object所指摄像机的方法。但是,您可能还需要担心将两个不同的状态及其所有旋转和位置互换,这可能会变得很复杂。