我有一个问题:我有一个立方体,我想让它去我想要的地方(向前,向后,向左或向右)。问题是当我旋转相机时,“前进”方向必须每次都在它前面,对于其他方向也是如此。
事实上,我已经通过这样做了前进和后退:
// For forward
camera.getWorldDirection( direction )
cube.position.add(direction)
// For backward
camera.getWorldDirection( direction )
cube.position.sub(direction)
我真正的问题是我如何将矢量方向“旋转”到90°,所以我只需要添加并转到立方体位置左右移动?
答案 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