Moteurs de physique des corps mous 2D?


9

Bonjour, j'ai récemment appris la bibliothèque graphique SFML et j'aimerais utiliser ou créer un système de physique 2D de corps non rigide à utiliser avec. J'ai trois questions:

La définition de corps rigide dans Box2d est

Un morceau de matière qui est si fort que la distance entre deux bits de matière sur le morceau est complètement constante.

Et c'est exactement ce que je ne veux pas car je voudrais faire des corps élastiques, déformables, cassables et de reconnexion. 1. Existe-t-il des moteurs physiques 2D simples, mais avec ce genre de caractéristiques? de préférence gratuit ou open source?

2. Sinon, pourrais-je utiliser box2d et travailler dessus pour le créer même s'il est basé sur des corps rigides?

3. Enfin, s'il existe un moteur physique simple comme celui-ci, devrais-je tout de même passer par le processus de création d'un nouveau, simplement pour l'expérience et pour améliorer les connaissances en mathématiques physiques? Je pense que cela aiderait si je voulais modifier le code d'un moteur existant ou créer un jeu avec une physique vraiment unique.

Merci!


1
Il y avait ce moteur appelé JelloPhysics (C #), mais le site semble être en panne. Il y a une vidéo ici: youtube.com/watch?v=SvqY_pgA6DU
bummzack

Réponses:


6

Vous pouvez utiliser des systèmes de corps rigides pour créer un corps souple et une dynamique fluide. Raison physique derrière ça? Eh bien, essentiellement, les atomes sont de petits corps rigides. Ce n'est pas tout à fait vrai bien sûr, mais pour plus de simplicité, vous pouvez les voir comme tels. Et les corps mous sont évidemment fabriqués à partir d'atomes.

Alors, comment créez-vous des "corps souples" en utilisant un moteur de corps rigide comme Box2D?

La technique essentielle consiste à lier ensemble des points de votre corps à l'aide d'articulations. Par exemple, si vous connectez les extrémités d'une liste de lignes à l'aide de joints de distance (ce qui signifie que la distance entre deux joints doit être constante), elle se comportera grossièrement comme un morceau de tissu.

Mais ce n'est qu'une description approximative. Beaucoup de "travaux élémentaires sur le terrain" avec Box2D ont été effectués par ewjordan, l'un des développeurs du port Java de Box2D. Voici un bon point de départ: http://www.box2d.org/forum/viewtopic.php?f=8&t=1978


Un mélange de ressorts de traction / compression est nécessaire pour conserver la "forme" du corps souple, ainsi que le calcul du volume pour le garder entier.
Jonathan Connell

Oui, mais tout cela se fait via des joints, si nous parlons de Box2D. Bien sûr, il devra modifier manuellement leur comportement, mais c'est là qu'il doit commencer. Pour des effets de volume constant dans des blobs de type Gish par exemple, JBox2D a ConstantVolumeJoint.
TravisG

Oui, je ne connais pas très bien Box2D, je sais juste comment certains collègues ont utilisé PhysX pour simuler une bulle ^^
Jonathan Connell

1

Le terme que vous recherchez est la physique des corps mous.

Wikipédia a une belle liste. Ils sont tous 3D AFAICS, mais devraient être bons.

Consultez également cette question SO.

Un grand livre (c'est un corps rigide, mais tous les mathématiques et la physique sont là; c'est aussi en 3D, mais il est trivial de les transférer en 2D) est Game Physics Engine Development . Il implémente un système à base de particules avant de passer sur des corps rigides et de collision.


1

Une façon simple de simuler des corps mous est de relier entre eux de petits corps rigides avec des joints élastiques. Ensuite, la partie difficile consiste à affiner les paramètres de votre modèle et à mapper la texture au modèle sous-jacent.

Le billet de blog suivant fournit une implémentation d'une boule déformable avec le moteur cocos2d: http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html


crédits pour le tirage au sort du débogage de cocos2d ;-)
sdabet
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.