Collision Detection Spheres Dynamiques

ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010 - 2 févr. 2006 à 18:37
ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010 - 12 févr. 2006 à 01:23
Salut tout le monde, je suis actuellement entrein de programmer un moteur physique en directx et c++ et j'aimerai savoir comment on teste l'intersection entre 2 capsules (pour tester la collision entre des spheres dynamiques). Merci d'avance ++

Oxyde

7 réponses

Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
2 févr. 2006 à 21:21
Fait un dessin, après tu y vas à coup de produits vectoriel et scalaire.
Qu'appelles-tu capsule ?
Cylindre aux extremités hémisphériques ?


Pour te dissuader de te lancer dans un moteur physique:
http://mapage.noos.fr/galmiza/dynamics.pdf


Par contre si c'est pour faire cogner quelques spheres, tu calcules la profondeur de pénétration (d(sphere_i, sphere_j)-r1-r2) et tu déduis un effort de répulsion à appliquer (ça c'est la méthode la plus pourri, mais ça marche et c'est facile à mettre en place).
0
ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010
2 févr. 2006 à 21:41
-Oui c'est sa que j'appelle capsule, enfaite j'aimerai une technique pour détecter la collision entre 2 spheres en mouvements quand celle-ci vont très vite et que d'une frame à l'autre elle se traverse alors j'ai pensé a garder la position precédente de la sphere et a schématisé lanimation dans une capsule englobante et pour savoir si 2 spheres ont pu se toucher entre 2 frames je cherche s'il y a collision entre les 2 capsules.

-lol sa ne me dissuade pas du tout mais je rajoute que le moteur physique que je compte faire et fais pour les jeux videos et non pas pour des applications méchaniques complexe.

-Oui sa pas de problème je l'ai déja fait.

Que pense-tu de ma méthode pour trouver une collision avec mon systeme de capsules ? (sachant que c'est pour un moteur physique de jeux video)

Oxyde
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
3 févr. 2006 à 01:07
Ta méthode pour trouver une collision est bonne oui !
Mais quel type de jeu veux-tu faire au juste ?

En fait, la doc montre que les techniques de calcul ont évolué énormement, et que les méthodes que l'ont est tenté d'utiliser quand on pense avoir du level en mécanique sont obsolètes, lentes et instables. En tout cas, j'ai arrété le développement du mien pour utiliser Novodex. J'en suis satisfait.

Pour revenir à ton cas, si tu comptes gérer uniquement des collisions entre balles, pas de problème, n'utilise pas de librairie physique: tes balles seront peut-être nombreuses mais leur durée de vie courte, donc les performances accrues des moteurs physiques ne sont pas du tout indispensable.
0
ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010
3 févr. 2006 à 16:55
Je veux faire un jeu de shoot dans l'espace mais enfaite j'ai des idées très novatrices , donc oui mon moteur physique ne sera pas très poussé (pas vraiment besoin) et donc je ne vais pas implementé un moteur physique complet pour ne gérer que sa.

Oxyde
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010
6 févr. 2006 à 20:04
Bon enfaite mon problème se résumerai à une intersection de 2 cylindres, le problèmes c'est que les seuls équations de cylindres que j'ai trouvé sont x²+y²=R² ce qui correspond à un cylindre de longueur infini et alligné sur l'axe Z.
- Y a-t-il une manière simple de calculer l'intersection entre 2 cylindres ? Si oui comment ?
- Sinon qu'elle est l'équation d'un cylindre orienté et de longueur définie ?

Merci d'avance

Oxyde
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
9 févr. 2006 à 23:47
C'est plus simple de calculer l'intersection entre 2 capsules que 2 cylindres. Sinon, tu penses bien que le cylindre aurait remplacé la capsule dans les moteurs physiques.

Tu procèdes petit à petit:
Tu as 2 capsules avec une matrice de transformation local->globlal, un rayon, une demi hauteur, l'axe est y et la capsule est centrée dans le repère local.

Tu vérifies si les cylindres infinis sont en contact:
distance entre les 2 droites < somme des rayons des 2 capsules; non -> pas collision
matrice_transformation*[0,0,0,1] donne centre dans repère global
matrice_transformation*[0,1,0,0] donne direction axe capsule dans global
donc tu déduis les vecteurs directeurs des axes des capsules.

Après c'est trop compliqué à expliquer avec des mots:

Si les 2 segments colorés 1D sont distants de moins de la somme des 2 rayons ainsi que les centres des sphères (tester cette dernière propriété après pour gagner en temps de calcul), alors collision, d'ou l'avantage des extremités hemisphériques !

Donc la tu sais si tu as collision entre les 2 capsules.
Pour la direction des contacts, vu que tes balles vont vite et que tes capsules seront TRES interpenetrées, tu peux l'approximer sans produire d'abération physique avec l'axe du vecteur calculé pour le calcul des distances entre les deux axes des capsules (vecteur le plus "court" qui lie les 2 droites).

Si ce n'est pas très clair, fait le moi savoir.
0
ionstorm356 Messages postés 38 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 28 juin 2010
12 févr. 2006 à 01:23
Hum pas tout compris l'histoire des matrices.

Oxyde
0
Rejoignez-nous