Ich rendere Sprites mit genauen Pixelkoordinaten, um den durch Antialiasing verursachten Unschärfeeffekt zu vermeiden (die Sprites sind Pixelkunst und sehen bei Filterung schrecklich aus). Da die Bewegung der Objekte jedoch mit variabler Geschwindigkeit, Schwerkraft und physikalischen Wechselwirkungen einhergeht, wird die Flugbahn mit Subpixel-Genauigkeit berechnet.
Bei ausreichend großen Bildschirmgeschwindigkeiten (vΔt größer als 2 oder 3 Pixel) funktioniert dies sehr gut. Bei geringer Geschwindigkeit kann jedoch ein merklicher Treppeneffekt auftreten, insbesondere entlang diagonaler Linien. Bei sehr langsamen Bildschirmgeschwindigkeiten (v << 1 Pixel pro Sekunde) ist dies kein Problem mehr, daher suche ich nur nach einer Lösung für Zwischengeschwindigkeiten.
Links ist die geplottete Trajektorie für eine große Geschwindigkeit dargestellt, die durch einfaches Runden der Objektkoordinaten erhalten wird. In der Mitte sehen Sie, was passiert, wenn die Geschwindigkeit abnimmt, und den Treppeneffekt, von dem ich spreche. Rechts den Ort der Flugbahn, den ich mir wünschen würde.
Ich interessiere mich für Algorithmusideen zum Filtern der Trajektorie, um das Aliasing zu minimieren und gleichzeitig das ursprüngliche Verhalten bei großen und kleinen Geschwindigkeiten beizubehalten. Ich habe Zugriff auf Δt, momentane Position und Geschwindigkeit sowie eine beliebige Anzahl vorheriger Werte, aber da es sich um eine Echtzeitsimulation handelt, weiß ich nichts über zukünftige Werte (obwohl eine Schätzung unter bestimmten Voraussetzungen bei Bedarf extrapoliert werden könnte). . Beachten Sie, dass aufgrund der Physiksimulation auch plötzliche Richtungsänderungen auftreten können.
velocity.y / velocity.x
mit einem zur Geschwindigkeit proportionalen Korrekturfaktor gelöst werden.