3

想知道是否有可能获得指针锁定控件中偏航对象的朝向并将其用作光线投射器的方向。我一直在玩弄代码,试图在其中添加一些基本的射击游戏内容。我一直在尝试使用指针控件提供的偏航对象中的 X 和 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 平移的数学,但这显然不适用于目标。

4

2 回答 2

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;

    }

}();

三.js r.59

于 2013-08-13T20:59:44.683 回答
2

好吧,使用新版本它不起作用。我必须添加

var v = new THREE.Vector3( 0, 0, -1 );

v.copy( direction ).applyEuler( rotation );

因为 Firefox 不识别 v。

于 2013-11-16T14:29:09.637 回答