Je rend les sprites aux coordonnées de pixels exactes pour éviter l'effet de flou provoqué par l'anticrénelage (les sprites sont du pixel-art et auraient l'air horribles s'ils étaient filtrés). Cependant, comme le mouvement des objets implique une vitesse, une gravité et des interactions physiques variables, la trajectoire est calculée avec une précision sous-pixel.
À des vitesses d'espace d'écran suffisamment grandes (vΔt supérieur à 2 ou 3 pixels), cela fonctionne très bien. Cependant, lorsque la vitesse est faible, un effet d'escalier notable peut apparaître, en particulier le long des lignes diagonales. Ce n'est plus un problème à des vitesses d'espace d'écran très lentes (v << 1 pixel par seconde) donc je ne cherche qu'une solution pour des valeurs de vitesse intermédiaires.
A gauche se trouve la trajectoire tracée pour une grande vitesse, obtenue par simple arrondi des coordonnées de l'objet. Au milieu, vous pouvez voir ce qui se passe lorsque la vitesse diminue, et l'effet d'escalier dont je parle. A droite, le lieu de la trajectoire que j'aimerais obtenir.
Je m'intéresse aux idées d'algorithmes pour filtrer la trajectoire afin de minimiser l'aliasing, tout en conservant le comportement d'origine à grandes et petites vitesses. J'ai accès à Δt, à la position et à la vitesse instantanées, ainsi qu'à un nombre arbitraire de valeurs précédentes, mais comme il s'agit d'une simulation en temps réel, je ne connais pas les valeurs futures (bien que si nécessaire, une estimation pourrait être extrapolée sous certaines hypothèses) . Notez qu'en raison de la simulation physique, des changements de direction soudains peuvent également se produire.
velocity.y / velocity.x
par un facteur de correction proportionnel à la vitesse.