Joe*_*ani 5 javascript rotation quaternions three.js cannon.js
有谁知道如何旋转CannonJS(物理库)CANNON.RigidBody?我正在尝试使用相机旋转对象,因此两者都朝向相同的方向.我知道我必须修改四元数,但这不能正常工作:
mPlayer.objectBody.quaternion.set(0, mPlayer.yawObject.rotation.y, 0, 1);
Run Code Online (Sandbox Code Playgroud)
它还会改变对象的Y位置,而不仅仅是旋转.
这是一个演示(WASD移动红色矩形 - 这是我想要旋转的)
这是主要的脚本
此刻它会根据物理特性自动旋转.谢谢您的帮助!
编辑:
我现在有点工作了.但它没有完全旋转(整个360度),它旋转的角度也不是很正确.如果有人可以看看,看看有什么不对,我真的很感激!:)
与以前相同的链接,但矩形/正文现在在相机下方,所以我可以看到它是否正确旋转.
我添加了此代码以使其旋转:
mPlayer.objectBody.quaternion.y = mPlayer.yawObject.rotation.y;
mPlayer.objectBody.quaternion.w = 1;
mPlayer.objectBody.quaternion.normalize();
Run Code Online (Sandbox Code Playgroud)
为了节省您查看代码,mPlayer.yawObject.rotation.y在MouseMove事件中设置:
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 ) );
};
Run Code Online (Sandbox Code Playgroud)
再次感谢!
在Cannon.JS开发人员的帮助下解决了这个问题.我现在正在使用:
mPlayer.objectBody.quaternion.setFromAxisAngle(new CANNON.Vec3(0,1,0), mPlayer.yawObject.rotation.y);
Run Code Online (Sandbox Code Playgroud)