J'ai vu box2d et bullet portés en JavaScript, mais aucun d'eux ne m'a attiré, à l'exception du code source. Tout semblait assez simple, une fois que j'ai regardé à l'intérieur.
Que font-ils dans chacune de ces bibliothèques pour obtenir une belle simulation physique? Je ne trouve aucune explication.
Réponses:
La physique des corps rigides est en fait assez simple dans son concept - c'est-à-dire que les comportements qu'un moteur essaie de créer ne sont pas très compliqués. C'est probablement pourquoi les bibliothèques que vous avez consultées vous semblent assez simples.
L'astuce est que faire une simulation qui est robuste , stable et rapide , même en présence de choses comme l'erreur en virgule flottante et les fréquences d'images faibles et variables, est assez difficile et implique généralement beaucoup de réglages et de bidouilles. Le problème est encore compliqué par le fait que beaucoup de personnes extrêmement intelligentes ont fait des efforts héroïques pour trouver de meilleures solutions et ont proposé des algorithmes beaux et puissants mais difficiles à comprendre qui ont donné au domaine une réputation de magie noire.
En général, un moteur physique va se préoccuper de trois choses (l'ordre dans lequel il les fait dans la boucle interne varie):
Pour la plupart d'entre eux, il existe à la fois des algorithmes simples mais pas si précis et des algorithmes complexes mais plus précis. Pour commencer:
Il y a une excellente introduction aux méthodes simples et à ce qui peut mal tourner dans les premiers chapitres du livre Game Physics Pearls qui vient d'être publié.
la source
Lisez la série sur la physique des jeux de Glenn Fiedler: http://gafferongames.com/game-physics/
En outre, Erin Catto (l'auteur de Box2D) a un article sur la dynamique contrainte .
Pour la détection de collision, lisez Détection de collision en temps réel par Christer Ericson
la source
http://en.wikipedia.org/wiki/Rigid_body_dynamics pourrait être un bon point de départ. Différents jeux diviseront les choses en différents corps, mais en général, vous avez un certain nombre de corps rigides discrets liés par des articulations avec des propriétés spécifiques. À chaque boucle du jeu, vous calculez les forces sur chaque corps et calculez ses nouveaux paramètres (position, vitesse, etc.). Vous devez également transmettre les forces de chaque corps aux autres avec lesquelles il partage les articulations et prendre en compte les forces globales (gravité).
Cela ne couvre pas les choses comme la physique des liquides ou des tissus, tout cela est du charabia pour moi. Il y a des équations différentielles impliquées et c'est à peu près au point où mes yeux brillent.
la source
OpenCloth détaille toutes les techniques d'intégration de la manière la plus simple possible. Beaucoup est dans le pipeline.
Détails: http://code.google.com/p/opencloth/
la source
Outre les équations physiques, une chose importante est le suivi de tous les objets, afin que la vérification de la détection des collisions et des interactions soit aussi rapide que possible. Le hachage spatial est la technique utilisée par le moteur physique Chipmunk .
la source
Juste pour ajouter à la liste des liens, j'ai trouvé les notes SIGGRAPH de Baraff très utiles.
la source