Frage

Ich versuche, um ein Objekt zu animieren, sagen wir, es ist ein Auto. Ich will es von Punkt gehen

x1, y1, z1

Punkt x2, y2, z2 . Er bewegt sich auf die Punkte, aber es scheint zu sein, driften und nicht in der Bewegungsrichtung zeigt. Also meine Frage ist: Wie kann ich dieses Problem in meinem updateframe () Ereignis lösen? Könnten Sie mir in Richtung einige gute Ressourcen zeigen?

Danke.

War es hilfreich?

Lösung

Als erstes Wie stellen Sie die Straße?

Vor kurzem habe ich genau das getan und ich Catmull-Rom Splines für die Straße. Um ein Objekt zu orientieren und machen es den Spline-Pfad folgen Sie den aktuellen zu interpolieren, müssen x, y, z Position von a t , die entlang der Spline geht, orientieren sie dann entlang das Frenet Koordinatensystem oder Frenet Rahmen für diese bestimmte Position.

Im Grunde genommen für jeden Punkt benötigen Sie 3 Vektoren: die Tangente, die Normal, und die binormal. Die Tangente wird die tatsächliche Richtung ist Sie Ihr Objekt (Auto) mag auf zeigen.

I Catmull-Rom zu wählen, weil sie die Tangenten an jedem Punkt abzuziehen sind einfach - machen die (Vektor) Differenz zwischen zwei anderen nahe an den aktuellen. (Sagen, Sie sind in t , wählen Sie t-epsilon und t + epsilon - mit epsilon einem klein genug, um konstant zu sein).

Für die anderen zwei Vektoren, können Sie dieses iterative Verfahren - das ist man mit einem bekannten Satz von Vektoren an einem Ende beginnen, und Sie arbeiten einen neuen Satz auf der Grundlage des vorherigen jeweils em <> updateframe () ).

Andere Tipps

Sie müssen die ursprüngliche Ausrichtung des Autos arbeiten, und die endgültige Ausrichtung des Fahrzeugs an seinem Ziel, dann interpolieren zwischen ihnen die Orientierung zu bestimmen dazwischen für den aktuellen Zeitschritt.

Diese Artikel beschreibt die Mathematik hinter dabei die Interpolation beschreibt, sowie einige andere Dinge, mit rotierenden Objekten zu tun, die für Sie von nutzen sein können. gamasutra.com im Allgemeinen ist eine hervorragende Ressource für diese Art der Sache.

Ich denke, interpoliert wird, geben die Drift Sie sehen. Sie müssen die Art und Weise Lenkung funktioniert .. Ihre Update-Funktion sollte 1) bewegen, das Auto immer in Richtung modellieren, wo es zeigt, und 2), um das Auto in Richtung des aktuellen Ziel drehen .. man nicht den anderen beeinflussen sollte, so dass die Dreh wird passieren, und schneller als die Ankunft abzuschließen.

Generell wird die Richtung der Auto zeigt entlang seiner Geschwindigkeitsvektor , das ist die erste Ableitung der Position Vektor.

Zum Beispiel, wenn das Fahrzeug in einem Kreis wird (mit einem Radius von r ) um den Ursprung jeden n Sekunden, dann die x Komponente von der Lage des Autos ist gegeben durch:

x = r.sin(2πt/n)

und das x Komponente seines Geschwindigkeitsvektor wird:

vx = dx/dt = r.(2π/n)cos(2πt/n) 

Tun Sie dies für alle die x y und z Komponenten, normalisieren den resultierenden Vektor und Sie haben Ihre Richtung.

zeigen immer das Auto in Richtung des Zielpunktes ist einfach und billig, aber es wird nicht funktionieren, wenn das Fahrzeug eine gekrümmte Bahn folgt. In diesem Fall müssen Sie das Auto entlang der Tangente an ihrem aktuellen Standort-zu-Punkt (andere Antworten siehe oben).

von einer Position zur anderen gibt ein Objekt eine Geschwindigkeit, eine Geschwindigkeit ein Vektor ist, und dass die Vektor-Normalisierung geben Ihnen die Richtungsvektor der Bewegung, dass Sie in einen „Blick auf“ Matrix verstopfen können, tun das Kreuz die oben mit diesem Vektor, der die Seite zu bekommen und schwupps Sie haben eine volle Matrix für die Richtungssteuerung des Objekts in Bewegung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top