Die Berechnung der rotation entlang eines Pfades
Ich versuche zu animieren, ein Objekt, lassen Sie uns sagen, es ist ein Auto. Ich will es von Punkt
x1,y1,z1
Punkt x2,y2,z2 . Es bewegt sich auf jene Punkte, aber es scheint zu Driften anstatt zeigen in die Richtung der Bewegung. Also meine Frage ist: wie kann ich lösen dieses Problem in meinem updateframe () - Ereignis? Könntest du mir in der Richtung einige gute Ressourcen?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, wie Sie repräsentieren die Straße?
Habe ich vor kurzem gemacht genau diese Sache und ich Catmull-Rom splines für die Straße. Zu orientieren ein Objekt und stellen Sie es Folgen Sie den spline-Pfad müssen Sie interpolieren die aktuellen x,y,z position von t, die Spaziergänge entlang der spline, dann richten Sie ihn entlang der Frenet Koordinaten System oder Frenet-Rahmen für die jeweilige position.
Grundsätzlich für jeden Punkt braucht man 3 Vektoren: die Tangente, die Normale, und der Binormalen. Die Tangente wird die aktuelle Richtung werden Sie, wie Sie Ihr Objekt (Auto) zeigen.
Ich wählen, Catmull-Rom, weil Sie leicht auf den Abzug der Tangenten an jedem Punkt zu - nur machen die (Vektor -) Unterschied zwischen 2 anderen in der Nähe zu dem aktuellen. (Sagen wir Sie sind bei t, pick t-epsilon und t+epsilon - mit epsilon klein genug Konstante).
Für die anderen 2 Vektoren, die Sie verwenden können, diese iterative Methode - das heißt, Sie beginnen mit einem bekannten Satz von Vektoren an einem Ende und arbeiten Sie ein neues set auf Basis der vorherigen jede updateframe() ).
Müssen Sie, um die anfängliche Ausrichtung des Autos, und die endgültige Ausrichtung der Wagen an seinem Bestimmungsort, dann interpolieren zwischen Ihnen zu ermitteln, die Orientierung zwischen den für den aktuellen Zeitschritt.
Diese Artikel beschreibt die Mathematik, die hinter dem tun der interpolation, sowie einige andere Dinge zu tun, mit rotierenden Objekten, die möglicherweise von Interesse für Sie sein. gamasutra.com im Allgemeinen ist eine hervorragende Ressource für diese Art der Sache.
Ich denke, dass die Interpolation ist was die treiben Sie sehen.
Sie brauchen, um zu modellieren, wie die Lenkung funktioniert .. dein update-Funktion soll 1) bewegen Sie das Fahrzeug immer in die Richtung, wo es gerichtet ist, und 2) drehen Sie das Auto in Richtung des aktuellen Ziels, .. man sollte sich nicht auf die anderen, so daß das passieren wird und vollständig ist schneller als die Anreise.
Im Allgemeinen, ist die Richtung, in die das Fahrzeug zeigt, ist entlang seiner geschwindigkeitsvektor, das ist das erste Derivat der position Vektor.
Zum Beispiel, wenn das Auto läuft in einem Kreis (mit radius r) um den Ursprung jeder n Sekunden, dann die x Komponente des Autos, die position ist gegeben durch:
und die x Komponente seiner Geschwindigkeit Vektor:
Tun Sie dies für alle x, y und z Komponenten, normalisieren die resultierende Vektor-und Sie haben Ihre Richtung.
Immer nach dem Auto in Richtung Ziel zeigen ist einfach und Billig, aber es funktioniert nicht, wenn das Auto folgt einem gekrümmten Pfad. In diesem Fall müssen Sie, um das Auto an der Tangente an der aktuellen Position (siehe andere Antworten, oben).
gehen von einer position zur anderen, gibt einem Objekt eine Geschwindigkeit, die Geschwindigkeit ist ein Vektor, und Normalisierung, die Vektor geben Sie den Richtungsvektor der Bewegung, Sie können Stecker in ein "look at" - matrix, tun Sie das Kreuz der mit diesem Vektor zu erhalten, der Seite und hey presto, Sie haben einen vollen matrix für die Richtung, die Kontrolle über das Objekt in Bewegung.