2013-04-07 13 views
5

Czy ktoś wie, jak mogę obrócić CannonJS (biblioteka fizyki) CANNON.RigidBody? Próbuję obrócić obiekt za pomocą kamery, więc oba są zwrócone w tym samym kierunku. Wiem, że trzeba zmodyfikować kwaternion, ale to nie działa prawidłowo:Jak obrócić urządzenie CannonJS RigidBody?

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

Zmienia się również Y położenia obiektu, a nie tylko obrotu.

Here's a demo (WASD przenieść czerwony prostokąt - czyli to, co chcę, aby obrócić)
Here's the main script

W tej chwili automatycznie obraca opartej na fizyce. Dzięki za pomoc!

EDYTOWANIE:
Mam coś teraz działa. Ale nie obraca się całkowicie (całe 360 ​​stopni), a kąt, pod którym obraca się, nie jest właściwy. Gdyby ktoś mógł rzucić okiem i zobaczyć, co jest nie tak, byłbym bardzo wdzięczny! :)

Same link as before, ale prostokąt/bryła znajduje się teraz pod kamerą, więc mogę sprawdzić, czy obraca się prawidłowo.

dodałem ten kod, aby go obrócić:

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

Aby zaoszczędzić pominie kodu mPlayer.yawObject.rotation.y jest ustawiony w przypadku 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)); 
}; 

Dzięki jeszcze raz!

Odpowiedz

6

Rozwiązano problem przy pomocy programisty Cannon.JS. Używam teraz:

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