2013-04-07 12 views
5

Weiß jemand, wie ich eine CannonJS (die Physikbibliothek) CANNON.RigidBody drehen kann? Ich versuche, das Objekt mit der Kamera zu drehen, so dass beide in dieselbe Richtung zeigen. Ich weiß, ich muss die quaternion ändern, aber dies korrekt funktioniert nicht:Wie man einen CannonJS RigidBody dreht?

mPlayer.objectBody.quaternion.set(0, mPlayer.yawObject.rotation.y, 0, 1); 

Es ändert sich auch die Y-Position des Objekts, nicht nur die Rotation.

Here's a demo (WASD das rote Rechteck zu bewegen - das ist, was ich drehen will)
Here's the main script

Im Moment automatisch auf der Physik dreht. Danke für die Hilfe!

BEARBEITEN:
Ich habe irgendwie funktioniert es jetzt. Aber es dreht sich nicht vollständig (die ganzen 360 Grad) und der Winkel, den es dreht, ist nicht ganz richtig. Wenn jemand einen Blick darauf werfen könnte, was falsch ist, würde ich es sehr schätzen! :)

Same link as before aber das Rechteck/Körper ist jetzt unter der Kamera, so kann ich sehen, ob es sich richtig dreht.

Ich habe diesen Code, um es drehen:

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

So speichern Sie den Code suchen, mPlayer.yawObject.rotation.y in der Mousemove-Ereignis gesetzt wird:

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)); 
}; 

Nochmals vielen Dank!

Antwort

6

Das Problem wurde mit Hilfe des Entwicklers Cannon.JS gelöst. Ich verwende jetzt:

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