Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何旋转火炮的刚体?_Javascript_Rotation_Three.js_Quaternions_Cannon.js - Fatal编程技术网

Javascript 如何旋转火炮的刚体?

Javascript 如何旋转火炮的刚体?,javascript,rotation,three.js,quaternions,cannon.js,Javascript,Rotation,Three.js,Quaternions,Cannon.js,有人知道我如何旋转火炮JS(物理库)CANNON.RigidBody?我试图让物体随着相机旋转,所以两者都朝向同一个方向。我知道我必须修改四元数,但这不能正常工作: mPlayer.objectBody.quaternion.set(0, mPlayer.yawObject.rotation.y, 0, 1); 它还会更改对象的Y位置,而不仅仅是旋转 (WASD移动红色矩形-这就是我要旋转的部分) 此时,它会根据物理原理自动旋转。谢谢你的帮助 编辑: 我现在有点让它工作了。但它没有完全旋转(

有人知道我如何旋转火炮JS(物理库)
CANNON.RigidBody
?我试图让物体随着相机旋转,所以两者都朝向同一个方向。我知道我必须修改四元数,但这不能正常工作:

mPlayer.objectBody.quaternion.set(0, mPlayer.yawObject.rotation.y, 0, 1);
它还会更改对象的Y位置,而不仅仅是旋转

(WASD移动红色矩形-这就是我要旋转的部分)

此时,它会根据物理原理自动旋转。谢谢你的帮助

编辑:
我现在有点让它工作了。但它没有完全旋转(整个360度),旋转角度也不太正确。如果有人能看看有什么问题,我会非常感激的!:)

但是矩形/主体现在在相机下面,所以我可以看到它是否正确旋转

我添加了以下代码以使其旋转:

mPlayer.objectBody.quaternion.y = mPlayer.yawObject.rotation.y;
mPlayer.objectBody.quaternion.w = 1;
mPlayer.objectBody.quaternion.normalize();  

为了避免查看代码,在MouseMove事件中设置了mPlayer.yawObject.rotation.y:

var onMouseMove = function ( event ) {
    var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
    var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;

    mPlayer.yawObject.rotation.y -= movementX * 0.002;
    mPlayer.pitchObject.rotation.x -= movementY * 0.002;

    mPlayer.pitchObject.rotation.x = Math.max( - PI_2, Math.min( PI_2, mPlayer.pitchObject.rotation.x ) );
};

再次感谢

在Cannon.JS开发者的帮助下解决了这个问题。我现在正在使用:

mPlayer.objectBody.quaternion.setFromAxisAngle(new CANNON.Vec3(0,1,0), mPlayer.yawObject.rotation.y);