Ich schreibe einen Partikelsimulator in C++.Framerate unabhängige Beschleunigung/Verzögerung?
Ich bewege Partikel durch Hinzufügen ihrer Geschwindigkeit zu ihrer Position bei jedem Zeitschritt.
Der Wert des Zeitschritts ist ein Prozentsatz des aktuellen Rahmens. Der Vollbildzeitschritt ist also 1, der Halbbildzeitschritt ist 0,5, der Viertelbildzeitschritt ist 0,25 usw. Die gesamten Simulationsschritte sind frameCount/timeStep ... also je kleiner der Zeitschritt ist, desto größer ist die Gesamtzahl Schritte simuliert.
Grundlegende Bewegung über Zeitschritte hinweg ist das gleiche sehr einfach. Die Gleichung lautet:
position = position + velocity * timeStep; //10 full frames later, end position is always the same
es aber für mein gegenwärtiges Verständnis von Mathematik zu kompliziert wird, wenn ich versuche, zu der Geschwindigkeit im Laufe der Zeit zu ändern. Zum Beispiel, wenn ich dies tue:
velocity = velocity * .95f;
position = position + velocity * timeStep; //10 full frames later, end position dependent on time step
Die Ergebnisse über verschiedene Zeitschritte sind nicht mehr die gleichen. Ich weiß, das ist, weil, wenn ich die Gesamtanzahl von Schritten vergrößere, die durch Verringern des Zeitschritts berechnet werden, nehme ich auch die Geschwindigkeit viel öfter ab, was einen großen Einfluss auf die Endposition des Partikels haben wird.
Wie kann ich die Geschwindigkeit über die Zeit so ändern, dass ich identische Ergebnisse über verschiedene Zeitschritte bekomme?
Hmm, wie kann ich herausfinden, wie hoch der Beschleunigungswert in Ihrer Funktion sein sollte, ausgehend von meiner anfänglichen (De) Beschleunigungsformel von (velocity * = .95)? – Tyson
@Tyson: Das ist keine Verzögerungsformel. Also gibt es keinen richtigen Weg, um es in eine Verzögerung zu übersetzen. Ich würde empfehlen, mit Zahlen herumzuspielen, bis Sie einen Wert bekommen, der richtig aussieht und sich anfühlt. –
Ist es nicht? Es beschreibt eine Änderung der Geschwindigkeit über die Zeit, nämlich eine Abnahme. Ich glaube, ich habe eher auf eine mathematische Lösung gehofft als auf eine Lösung, die 'wackelt, bis es funktioniert'. – Tyson