Three.js 90°矢量旋转

时间:2017-06-18 19:11:40

标签: three.js

我有一个问题:我有一个立方体,我想让它去我想要的地方(向前,向后,向左或向右)。问题是当我旋转相机时,“前进”方向必须每次都在它前面,对于其他方向也是如此。

事实上,我已经通过这样做了前进和后退:

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

我真正的问题是我如何将矢量方向“旋转”到90°,所以我只需要添加并转到立方体位置左右移动?

1 个答案:

答案 0 :(得分: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