Comment créer un moteur physique 2D? [fermé]


20

Les jeux les plus avancés que j'ai créés sont un jeu de billard à 8 balles fait avec le moteur physique Box2dFlashAS3 et un jeu de plateforme avec des niveaux.

Quand j'ai fait des jeux de plate-forme, j'ai toujours voulu savoir comment faire un moteur, pour pouvoir le réutiliser. Quand je vois des jeux qui ont des pentes, des pentes incurvées, une gravité parfaite et une physique réelle, j'ai toujours souhaité savoir coder le moteur.

Veuillez suggérer des techniques et des articles pour toute base de connaissances pertinente nécessaire.


Réponses:


16

Alors que je recommande contre rouler votre propre moteur physique pour autre chose que l'expérience de le faire ( se rendre compte que vous devriez probablement jeter quand vous avez terminé - il est vraiment difficile d'obtenir toutes les edgecases et limite numérique / problèmes de stabilité triés , et votre temps peut être beaucoup mieux utilisé en contribuant à un moteur existant), voici quelques ressources:

Leçons de la salle de billard: la détection rapide et précise des collisions entre cercles ou sphères traite de la collision cercle / cercle et sphère / sphère.

Les didacticiels N sont merveilleux pour une compréhension de base de la détection et de la réponse basées sur le théorème de l'axe de séparation.


9

Erin Catto a toutes les conférences GDC sur la mise en œuvre de Box2D en ligne. Box2D a également un code simple à lire, selon mon expérience.


les pdf sont des matériaux très résistants. Mais, quand j'ai lu les fichiers cpp et h, comme vous l'avez dit, ils sont "compréhensibles". Merci.
Vishnu

+1. Box2D fait également très attention à la stabilité, l'une des choses qui est très difficile lorsque vous roulez vous-même.
Leander

5

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:

  1. Détection : Il est détecté que deux corps se croisent.
  2. Résolution : la position de chaque corps est modifiée afin qu'ils ne se croisent plus.
  3. 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.




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.