使用VRControls时无法更改相机位置

Unable to change camera position when using VRControls

本文关键字:相机 位置 VRControls 使用      更新时间:2023-09-26

我有以下代码:

...
camera = new THREE.PerspectiveCamera(75, screenRatio, 1, 10000 );
camera.position.z = -10; // position.set(0, 0, -10) also not working.
controls = new THREE.VRControls( camera );
effect = new THREE.VREffect( renderer );
effect.setSize( window.innerWidth, window.innerHeight );
...

VRControls与加速度计同步工作,但我无法更改相机的位置。它似乎卡在原点(0,0,0)。在应用VRControls和VREffect之前,它运行得很好。

在Mozilla VR团队演示的Sechelt演示中找到了解决方案。我将在这里放一个代码片段,作为其他VR初学者的参考。

将相机添加到组中而不是直接更新相机位置是移动相机的方法。

var scene, renderer, cameraRatio, camera, controls, effect, dolly;
function init() {
    scene = new THREE.Scene();
    renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );
    cameraRatio = window.innerWidth / window.innerHeight;
    camera = new THREE.PerspectiveCamera( 75, cameraRatio, 1, 1000 );       
    controls = new THREE.VRControls( camera );
    effect = new THREE.VREffect( renderer );
    effect.setSize( window.innerWidth, window.innerHeight );
    // This helps move the camera
    dolly = new THREE.Group();
    dolly.position.set( 0, 0, 0 );
    scene.add( dolly );
    dolly.add( camera );
    ...
    // Of course, there should be lights, objects, etc
}
function animate() {
    dolly.position.x += 0.1;
    controls.update();
    effect.render( scene, camera );
}
init();
animate();

我认为相机现在是object。您可以尝试object.position.set()