2016-12-06 103 views
0

我正在使用three.js使用指针锁控件。我将它设置为当函数被调用时更改摄像头的旋转。但是,正因为如此,相机才开始自行旋转。Three.js旋转摄像头并更新控件(可能的Gimbal锁?)

而不是它旋转整个相机和控制方案,它似乎旋转相机,所以如果你按W向前移动,你实际上在不同的方向移动。这就像走到你身边,而不是移动整个身体。

任何方法来解决这个问题?上述

camera.lookAt(new THREE.Vector3(50, 0, 0)); 

代码是我使用得到它看一个载体(可以用camera.lookAt(objectnamehere.position)来代替的东西。上面

// Camera 
// ------- 
camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 1, 1000); 

// Controls 
// -------- 
controls = new THREE.PointerLockControls(camera); 
scene.add(controls.getObject()); 
//camera.lookAt(new THREE.Vector3(50, 0, 0)); 

var onKeyDown = function(event) { 

    switch (event.keyCode) { 

     case 38: // up 
     case 87: // w 
      moveForward = true; 
      break; 

     case 37: // left 
     case 65: // a 
      moveLeft = true; 
      break; 

     case 40: // down 
     case 83: // s 
      moveBackward = true; 
      break; 

     case 39: // right 
     case 68: // d 
      moveRight = true; 
      break; 
    } 

}; 

var onKeyUp = function(event) { 

    switch (event.keyCode) { 

     case 38: // up 
     case 87: // w 
      moveForward = false; 
      break; 

     case 37: // left 
     case 65: // a 
      moveLeft = false; 
      break; 

     case 40: // down 
     case 83: // s 
      moveBackward = false; 
      break; 

     case 39: // right 
     case 68: // d 
      moveRight = false; 
      break; 

    } 

}; 

document.addEventListener('keydown', onKeyDown, false); 
document.addEventListener('keyup', onKeyUp, false); 

代码设置了摄像头并为three.js所控制系统pointerlock控制。

任何想法?谢谢。

回答

0

PointerLockControls预计未旋转的摄像头。摄像头视图方向为c由相机的由控件创建的父对象进行控制。

您可以使用

controls.getObject.rotation.y = value; // radians 

更改摄像机标题,

controls.getObject().children[ 0 ].rotation.x = value; // radians 

改变相机间距。

可能很高兴有一个controls.lookAt(v)方法。如果需要,您可以在three.js github网站上提交增强请求。

three.js r.82

相关问题