2016-12-06 38 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