目前,我正在使用three.js和pointerlockcontrols开发FPS。

使用下面的代码,我可以向任何水平方向射击:

var direction = new THREE.Vector3( 0, 0, -1 );
var rotation = new THREE.Euler( 0, 0, 0, "XYZ" );
var cameraDirection = new THREE.Vector3(this.game.usermodel.root.children[0].position.x, this.game.usermodel.root.children[0].rotation._x, this.game.usermodel.root.children[0].position.z);
cameraDirection.copy( direction ).applyEuler( this.game.user.rotation );

var raycaster = new THREE.Raycaster(this.game.usermodel.root.children[0].position, cameraDirection);


但是我的代码没有考虑y轴。下面的线保持音高旋转:

this.game.usermodel.root.children[0].rotation._x


如何应用此值,以便我也可以沿y轴(垂直于任何方向)拍摄?目前,子弹正沿着一条直线前进。

提前感谢你的帮助。

最佳答案

如果使用的是PointerLockControls,并且要设置光线投射器,则可以使用以下模式:

var direction = new THREE.Vector3();
var raycaster = new THREE.Raycaster(); // create once and reuse
...

controls.getDirection( direction );
raycater.set( controls.getObject().position, direction );


如果使用PointerLockControls,请勿直接设置摄像机的位置或旋转角度。

three.js r.71

关于javascript - Three.js Pointerlockcontrols沿y轴射击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29311875/

10-12 16:22