2010-11-27 3 views
3

Je développe un moteur physique basé sur les impulsions, mais j'ai un problème avec les objets de grande différence de masse.Physique basée sur les impulsions - Empilement d'objets lourds sur un objet léger

À chaque cadre, le moteur applique des impulsions pour gérer les collisions. Les impulsions sont appliquées sur un certain nombre d'itérations, entre chaque paire d'objets en collision. Cela fonctionne bien si les objets ont à peu près la même masse.

Mais le problème est que lorsque vous placez un objet lourd, au-dessus d'un objet léger, l'objet lourd forcera alors l'objet léger dans le sol.

La cause du problème est que les impulsions appliquées entre les deux objets sont trop petites, donc même sur un certain nombre d'itérations, il ne suffira pas de contrer la gravité sur l'objet lourd.

Je crois qu'il existe des moyens de calculer avec précision les impulsions nécessaires, mais je crains que ce soit trop compliqué? Donc, la plupart du temps, je cherche des astuces pour contrer ce problème, mais je ne change pas le fonctionnement du moteur.

Merci pour vos idées!

+0

Vous auriez besoin de supporter (au moins) la déformation élastique des corps et du sol. – dmckee

+0

Comment calculez-vous les impulsions? – Beta

+0

Je calcule l'impulsion, à chaque collision, comme si elle n'était pas affectée par une autre collision. Mais en itérant, il trouvera généralement la bonne "impulsion totale". – LaZe

Répondre

2

Google pour « propagation de choc », l'idée de base est que vous triez vos contacts dans la direction de la pesanteur (généralement le long de l'axe « y ») et lors de la résolution de contact vous gelez les corps inférieurs (attribuez à leur masse infinie, c'est-à-dire, invMass = 0.0f et invInertiaTensor devrait être une matrice zéro) afin qu'ils ne «coulent» pas. Je n'ai pas implémenté cela, je suis aux prises avec mon propre moteur de physique merdique.

+0

Merci pour la suggestion, je vais regarder dans cela. Je pense que cela pourrait aider avec ce cas spécifique avec la gravité. Je voudrais cependant vraiment trouver une solution plus générale. Si, par exemple, une force centripète forçait des objets à se croiser, je ne saurais comment résoudre cela avec la propagation du choc. – LaZe

+0

J'essaie de comprendre comment trier réellement ... est-ce que je devrais vraiment le découper en fonction de la position de l'axe Y ou faire une analyse du coût réel? – FlavorScape

Questions connexes