Grundsätzlich möchte ich, dass sich meine Kamera in 3D automatisch bewegt. Momentan habe ich eine lineare Bewegung, die ziemlich dumm ist, also würde ich gerne eine springende Bewegung machen.
Was ist jedoch eine gute Gleichung für das Hüpfen? Ich meine, für einen Kreis können Sie das tun y = sqrt(1 - x^2)
, aber wenn ich einen springenden Graphen hätte, wie würde die entsprechende Formel lauten? Ich denke, es ist etwas mit, abs
da es "springen" muss. So etwas wie (ich habe das mit Paint erfunden):
Was ist eine gute Gleichung, die zu einem solchen Diagramm führt? Die Transformationen, die ich selbst machen kann, denke ich, aber ich suche nur nach der Art von Gleichung.
3d
mathematics
camera
movement
pimvdb
quelle
quelle
y = abs(cos((x+18)/6.2)/((x+18)/6.2))*149
. @SteveH: Könnten Sie möglicherweise die Schlüsselbegriffe in Newtonschen Lösungen angeben? Ich verwende anscheinend die falschen, da ich kein gutes Beispiel für die Implementierung finden kann.Antworten:
Die Verwendung einer grafischen Gleichung hilft Ihnen nicht dabei, natürlich aussehende Beschleunigungen auf das System anzuwenden. Sie werden überrascht sein, wie einfach es wäre, hier einfach Newtonsche Grundgleichungen zu verwenden. Geben Sie dem Objekt ein wenig Masse und Impuls und lassen Sie die Schwerkraft und Newton die Beschleunigungen und Positionsänderungen bewältigen. Es ist viel einfacher als Sie vielleicht denken
quelle
Anstatt eine direkte Antwort zu geben, möchte ich Sie in die richtige Richtung weisen. Wenn Sie nach KI suchen, um Objekte zu bewegen, finden Sie Algorithmen, die Variablen wie Geschwindigkeit, Masse, Geschwindigkeit und Beschleunigung verwenden. Wenn Sie die Gravitationskraft in die Gleichung einfügen, sollten Sie ein realistisches Verhalten erhalten.
Wie in einem der Kommentare zu Ihren Fragen angegeben, ist es nicht so kompliziert.
Ich empfehle, das Spiel AI anhand eines Beispiels zu programmieren, was ich sehr hilfreich fand.
Ich habe auch diesen Link gefunden , der die Kräfte erklärt, die für einen springenden Ball erforderlich sind.
quelle
Wenn Ihre Bewegung Ihrem Diagramm sehr ähnlich sein sollte, können Sie eine Bounce-Lockerungsgleichung wie diese ( Quelle ) verwenden:
Die Bewegung würde in diesem Diagramm aussehen (easyIn):
quelle
x^2
Varianten. Wenn ich benutze,easeOutBounce(50, 0, 50, 50)
bekomme ich den Bouncing-Effekt mit 50 Schritten im Bereich von 0 bis 50. Danke!Wenn Sie springen möchten, schauen Sie in den Restitutionskoeffizienten . Es ist ein Wert zwischen 0 und 1, der die "Sprungkraft" der Kamera darstellt. Ein Wert von 0 bedeutet, dass kein Aufprall auftritt, wenn das Objekt mit dem Boden kollidiert, und 1 bedeutet, dass die Kamera nach ihrer Kollision mit dem Boden wieder auf ihre ursprüngliche Höhe zurückspringt (in diesem Szenario sowieso).
Der einfachste Weg, dies zu implementieren, besteht darin, Ihrer Kamera einen anfänglichen Geschwindigkeitsvektor zu geben (nennen Sie es u), und Sie möchten den endgültigen Geschwindigkeitsvektor finden, nachdem die Kamera kollidiert ist (nennen wir dies v). Rufen wir den AdR an. E.
e = v / u
Alles, was Sie tun müssen, ist, Ihre Anfangsgeschwindigkeit mit dem Koeffizienten zu multiplizieren, diese Geschwindigkeit zu negieren (damit sie sich in die entgegengesetzte Richtung bewegt) und voila, Sie haben Ihre Endgeschwindigkeit und wenn Sie dies für jedes Mal tun, wenn sie kollidiert, haben Sie Ihre springende Bewegung. Dies setzt voraus, dass Sie eine flache Ebene haben, gegen die Sie springen möchten. Wenn Sie ein komplexes Netz haben, gegen das Sie kollidieren, multiplizieren Sie den Vektor nicht mit dem Normalen, sondern mit der Normalen des Polygons, mit dem Sie kollidieren (was im Wesentlichen der Fall ist) was Negation auf einer flachen Ebene macht).
Verwenden Sie eine Art Positionsaktualisierungsfunktion (Euler, Verlet oder sogar RK4 - siehe diesen Link ), um diese Aufgabe erheblich zu vereinfachen.
Hoffe das hilft (und ich hoffe meine Mathematik ist nicht zu weit weg: P)
quelle
Wenn Sie nach einer Gleichung suchen, die einen Sprung genau beschreibt, aber grob beschreibt, können Sie Folgendes versuchen:
wo
quelle