2016-04-18 3 views
2

Ich möchte ein Raumschiff wie eine Kanonenkörperbewegung erreichen. (Ich bin wirklich ein Anfänger) Ich habe einige Beispiele gefunden, aber keiner von ihnen ist genau das, wonach ich suche.KanonJS-Objekt in 3D entsprechend seiner Quaternion bewegen

Da ich weiß, wie man ein Objekt richtig bewegt, muss man seine Geschwindigkeit ändern.

Hier ist, was ich hier getan habe: http://codepen.io/Tomo0613/pen/xVjqqKenter code here Aber ich habe definitiv Probleme mit dem Verständnis von Quaternionen.

Gibt es eine Möglichkeit, den Vektor des Körpers entsprechend seiner Quaternion zu aktualisieren, wie ich es rotiere, oder das immer mit der Welt verbunden ist? Resultierend: wenn der Körper nur auf der Z-Achse beschleunigt, würde er sich immer in die Richtung bewegen, in die er zeigt.

Antwort

2

Die Geschwindigkeit auf dem Körper ist immer in Weltkoordinaten. In diesem Fall möchten Sie wahrscheinlich die lokale Geschwindigkeit (z. B. vec(0,0,+1)) in einer Variablen verfolgen und diese dann in world velocity umwandeln und sie jedes Mal auf den Body anwenden, wenn sich die Rotation ändert.

var localVelocity = new CANNON.Vec3(0, 0, 1); 
var worldVelocity = body.quaternion.vmult(localVelocity); 
body.velocity.copy(worldVelocity); 

Oder eine schnelle, aber schwieriger zu lesen Version des gleichen Code:

var localVelocity = new CANNON.Vec3(0, 0, 1); 
body.quaternion.vmult(localVelocity, body.velocity); 
+0

Eigentlich ich eine Art von Lösung aus [http://codepen.io/Tomo0613/full/PzwgxV /] und jetzt sehe ich klarer, aber trotz allem kämpfe ich immer noch mit Mathe. Also danke für deine Antwort! –

+0

Hallo, ich frage mich, wofür localVelocity ist? Kannst du bitte erklären ? –

+1

@ SébastienGarcia-Roméo Wenn ein Ball mit der Geschwindigkeit "0,0,1" rollt, während er sich auf einem Raumschiff befindet, das sich auf "1000,0,0" bewegt, ist die reale (Welt-) Geschwindigkeit des Balls "1000,0,1" . Die 'localVelocity' ist nur eine Möglichkeit, diese Geschwindigkeit relativ zum Raumschiff '0,0,1' zu verfolgen, da es einfacher ist, diese für Kollisionen mit Raumschiffwänden zu verwenden. Im obigen Beispiel ist es eher so, dass das Raumschiff nur gedreht wird und sich nicht bewegt, aber es ist die gleiche Idee. –

Verwandte Themen