想知道是否有可能让指针锁控制中的偏航对象面对并将其用作raycaster的方向。我一直在玩代码,试图添加一些基本的射击游戏。我一直在尝试使用X& amp;指针控制提供的yaw对象的Y值,但没有运气。这是我到目前为止所做的:
setupTarget: function() {
//var vector = new THREE.Vector3(game.mouse.x, game.mouse.y, 0);
var yaw = game.controls.getObject();
var pitch = game.controls.pitchObject;
var vector = new THREE.Vector3(
yaw.position.x * Math.cos(pitch.rotation.x),
yaw.position.y * Math.sin(yaw.rotation.y),
0
);
var dir = vector.sub(yaw.position).normalize();
this.ray = new THREE.Raycaster(yaw.position.clone(), dir);
}
我知道这是错误的,除了它不起作用。计算x& y基于旋转的平移,但这对目标来说显然不起作用。
答案 0 :(得分:5)
将以下内容添加到PointerLockControls
的副本中(或等待下一个版本的几天):
this.getDirection = function() {
// assumes the camera itself is not rotated
var direction = new THREE.Vector3( 0, 0, -1 );
var rotation = new THREE.Euler( 0, 0, 0, "YXZ" );
return function( v ) {
rotation.set( pitchObject.rotation.x, yawObject.rotation.y, 0 );
v.copy( direction ).applyEuler( rotation );
return v;
}
}();
three.js r.59
答案 1 :(得分:2)
好吧,使用新版本它不起作用。我必须添加
var v = new THREE.Vector3( 0, 0, -1 );
前
v.copy( direction ).applyEuler( rotation );
因为Firefox无法识别v。