2013-04-07 19 views
5

Qualcuno sa come posso ruotare un CannonJS (la libreria fisica) CANNON.RigidBody? Sto cercando di far ruotare l'oggetto con la fotocamera, quindi entrambi si trovano nella stessa direzione. So di avere a modificare il quaternione, ma questo non funziona correttamente:Come ruotare un CannonJS RigidBody?

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

cambia anche la posizione Y dell'oggetto, non solo la rotazione.

Here's a demo (WASD per spostare il rettangolo rosso - che è quello che voglio far ruotare)
Here's the main script

Al momento ruota automaticamente basato sulla fisica. Grazie per l'aiuto!

EDIT:
ho sorta di capito di lavoro ora. Ma non ruota completamente (l'intero 360 gradi) e l'angolo che ruota non è del tutto corretto. Se qualcuno potesse dare un'occhiata e vedere cosa non va, lo apprezzerei davvero! :)

Same link as before ma il rettangolo/il corpo è sotto la telecamera ora, quindi posso vedere se sta ruotando correttamente.

ho aggiunto questo codice per farlo ruotare:

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

Per risparmiare guardando attraverso il codice, mPlayer.yawObject.rotation.y sorge nel 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)); 
}; 

Grazie ancora!

risposta

6

Risolto il problema con l'aiuto dello sviluppatore Cannon.JS. Ora sto usando:

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