dämpfung



  • Hallo!
    Hat jemand von euch eine Routine auf Lager, die apprupte Änderungen von
    Eingabewerten zeitverzögert glättet,d.h. linear dämpft?
    zb. soll die Änderung der grafischen Szene durch heftige Joystickbewegungen
    "nachhängen". Ich habe da schon an einer Funktion rumprobiert, die pro Framerate
    aufgerufen wird und mit flags und temporären globalen Variablen arbeitet,
    habe aber bis jetzt nur eine Zeitverzögerung hinbekommen!(die apruppte
    Bewegungsänderung ist immer noch da, wenn auch etwas später)
    Dank euch! 😕



  • Wenn Du die Eingaben pufferst kannst Du doch ohnehin fast alles damit anstellen - mach eine Variable in der die Änderung gespeichert ist, eine Konstante die die maximale Änderung pro Frame angibt und eine Variable die die bereits erfolgte Änderung speichert.



  • Ich würde es so machen:

    Da du anscheinend eine Flugsimulation oder sowas ähnliches hast würde ich drei Variablen für die Drehung um die jeweilige Achse nehmen und drei weitere für die Drehgeschwindigkeiten. Je nachdem wie stark der Joystick bewegt wird werden nun die Geschwindigkeitsvariablen verändert. Und zwar mit Addition und Subtraktion. Man muss die Werte natürlich einschränken, dass die Drehung nicht zu schnell wird. Nachdem das geschehen ist verändert man die Winkel mit diesen Geschwindigkeiten, auch durch Addition.

    Wenn man dann eine abrupte Richtungsänderung macht, wird die Richtung nur Schrittweise geändert und die Bewegung müsste weich werden.

    Mit der Bewegung nach vorn oder hinten kann man das natürlich genauso machen.



  • In OSR funktionierte das ganze so:

    Aus der aktuellen Joystickstellung wird ein "Zielwert" berechnet, ein winkel zwischen -85° und +85°.

    Es wird unterschieden ob sich der aktuelle Winkel erhöhen oder verringern muss.

    Aus der vergangenen Zeit seit der letzten Abfrage und einer Winkelgeschwindigkeit wird eine maximale Änderungen berechnet.

    Der aktuelle Winkel wird um diese Änderung verändert, bewegt er sich dabei über den Zielwert hinaus, wird er auf den Zielwert gesetzt.


Anmelden zum Antworten