Voici comment procéder:
Mouvement approximatif
Chaque objet physique a besoin de ces vecteurs:
- Position : où se trouve l'objet.
- Vitesse : comment sa position change.
- Accélération : comment sa vitesse change.
Donc, intuitivement, vous devez faire ce genre de chose à chaque image pour chaque objet physique a
:
a.speed += a.acceleration
a.position += a.speed
Pièges : c'est ce que l'on appelle la méthode d'intégration d' Euler . Cette approximation est meilleure pour les petites vitesses et accélérations et pour les petits pas de temps. Dans un jeu, cela est normalement vrai. Mais si un objet se déplace très rapidement vers une paroi mince ou directement vers un autre objet en mouvement, il peut sauter la collision avec cet objet lorsque sa position est incrémentée d'une quantité suffisamment importante pour le traverser entièrement. Si vous avez des objets se déplaçant rapidement, vous devrez peut-être la détection de collision continue pour vous en sortir.
Collision
La collision peut être approchée avec ce type de séquence:
- Détection : Il est détecté que deux corps se croisent.
- Résolution : la position de chaque corps est modifiée afin qu'ils ne se croisent plus.
- Physique : La vitesse de chaque corps est modifiée pour tenir compte de l'élan, de la friction et de la restitution (rebond).
Ceci est connu sous le nom de détection de collision discrète, car il se produit à des moments discrets. Chaque étape mérite attention:
Étape 1: Détection de collision (les choses entrent-elles en collision?)
Pour deux cercles : vérifiez simplement si leurs centres sont plus éloignés que la somme de leurs rayons.
Pour deux rectangles : vérifiez si l'une de leurs coordonnées d'angle se trouve dans l'autre rectangle.
Pour tout ce qui implique des polygones plus complexes , vous aurez besoin du théorème d'axe de séparation , qui est un sujet pour une autre question.
Pièges : il y a vraiment beaucoup d'autres types de collision que vous voudrez peut-être considérer. Certains sont vraiment complexes: les polygones convexes peuvent se croiser plusieurs fois !
Étape 2: Résolution de collision (les séparer.)
Une méthode simple pour résoudre une collision est la traduction par pénétration minimale , en utilisant des valeurs obtenues à partir de la détection de collision. Il s'agit essentiellement de séparer les objets avec la distance de mouvement minimale possible.
À titre d'exemple, considérons la collision cercle-cercle où l'un des cercles est fixé en place. Le vecteur de déplacement minimum a la même direction que la différence entre leurs vecteurs médians. Sa longueur est la différence entre la somme de leurs rayons et la distance entre les centres.
Cette idée se généralise facilement à d'autres formes.
Pièges : si les deux objets en collision sont mobiles, vous devrez peut-être les déplacer tous les deux d'une fraction de la distance totale pour obtenir une approximation crédible de leur mouvement. Ils devront évidemment évoluer dans des directions différentes.
Étape 3: Physique des collisions (autres changements.)
La chose la plus évidente qui a tendance à se produire est qu'un ou deux des objets changent de direction, c'est-à-dire que leur vecteur de vitesse tourne. C'est assez facile à mettre en œuvre.
Pièges : les objets peuvent être élastiques , mais ils peuvent ne pas l'être , auquel cas l'énergie totale dans le système est réduite. Vous pourriez avoir besoin de glisser en raison de la résistance à l'air. La friction (en particulier la friction statique ) est notoirement complexe à mettre en œuvre .
Quelques conclusions
La simulation de la réalité est exponentiellement plus difficile si vous voulez la simuler. Vous entrez dans un champ de mines d'innombrables cas marginaux, de formules incroyablement difficiles et de piles de documents de recherche en constante augmentation.
Si vos besoins sont simples ou que vous avez hâte d'apprendre, essayez-le.
Si vos besoins sont complexes ou que vous n'aimez pas les mathématiques, procurez-vous un moteur physique pour passer en revue les détails pour vous. Box2D et Bullet sont assez populaires dans les jeux.