2017-06-18 120 views
0

我遇到了一個問題:我有一個立方體,我想讓它走到我想要的位置(向前,向後,向左或向右)。問題在於,當我旋轉相機時,每次前方的「前進」方向必須位於前方,其他方向相同。Three.js 90°向量旋轉

其實之前我就做這個有向前和向後的工作:

// For forward 
camera.getWorldDirection(direction) 
cube.position.add(direction) 
// For backward 
camera.getWorldDirection(direction) 
cube.position.sub(direction) 

我真正的問題是我怎麼做才能「旋轉」的矢量方向90°,所以我只需要添加並分立方體位置左右移動?

回答

1

您想指定相機空間中的方向並將該方向轉換爲世界空間。您可以通過以下這樣一個模式做到:

// create once and reuse 
var RightDir = new THREE.Vector3(1, 0, 0); 
var UpDir = new THREE.Vector3(0, 1, 0); 
var ForwardDir = new THREE.Vector3(0, 0, - 1); // the camera looks down its negative-z axis 
var dir = new THREE.Vector3(); 
var distance = 10; 

然後,立方體移動到右側,例如:

dir.copy(RightDir).transformDirection(camera.matrixWorld).multiplyScalar(distance); 

cube.position.add(dir); 

要移動到左側,使用負距離。

注意:camera.matrixWorld通常由渲染器爲您更新。如果在您的應用程序中不是,那麼您在訪問它之前需要致電camera.updateMatrixWorld()

three.js。 r.85

+0

請記住在用戶幫助時接受答案。 – WestLangley