PDA

Voir la version complète : Gestion des collisions 3D


DJP
03/03/2007, 01h08
Je cherche des informations sur le fonctionnement des moteurs physiques, principalement les collisions (la gravité,les rebonds etc... ne sont pas un problème)...:ange:
Pour faire simple : comment gérer, par exemple, des cubes qui doivent s'entrechoquer de n'importe quelle façon... "relativement" proprement...:S

Je pense que ce n'est pas "évident" donc, comme pour le "vote du public" je préfère que seul ceux qui "savent" s'exprime, afin d'éviter de perdre du temps avec des idées "ça devrai marcher"...

(oui je sais, on va encore dire que je suis élitiste, mais je m'en fout :devil: )

Arialia
03/03/2007, 03h31
Tiens je t'ai trouvé un tuto (http://bakura.developpez.com/tutoriel/physique/newton/), je l'avais vu par hasard hier ou avant-hier B)

sur le moteur Newton pas eu le temps de l'éplucher je te passes l'économe ...:lol:

DJP
03/03/2007, 04h03
bah, c'est sympa, mais mon but n'est pas d'utiliser un truc déjà fait... sinon autant balancer le PhysiX direct ;)
(Merci quand même)

Dr.Vince
03/03/2007, 12h50
han..... t'as même pas respecté le format des demandes d'aide, c'est pas bien =_=

Pitt
03/03/2007, 13h23
Déjà, pour savoir si 2 volumes se coupent, tu dois les englober dans des boites englobantes, cad des cubes dont les faces sont parallèles aux axes du repère.
Tu commences par tester les boites, et s'il y a collision, alors tu testes s'il y a collision entre les 2 volumes.

Pour l'intersection des boites, c'est tout simple : ^^

si (xmin1 > xmax2) pas de collision;
si (xmax1 < xmin2) pas de collision;
si (ymin1 > ymax2) pas de collision;
si (ymax1 < ymin2) pas de collision;
si (zmin1 > zmax2) pas de collision;
si (zmax1 < zmin2) pas de collision;

Il faut donc faire un algo de test pour chaque type de volume que tu utilises dans ton moteur 3D. Si tu utilises OpenGL, c'est pas trop compliqué, vu que tout est basé sur des triangles/rectangles. J'ai pas d'algo à te donner dans l'immédiat, vu que c'est un peu plus compliqué :rolleyes:, mais je peux peut-être te retrouver ça quelque part.

Après, bah tu t'occupes des forces et de la vitesse des objets, mais "c'est pas le plus compliqué". ^^

C'est ce que tu voulais savoir ? Ou je suis complètement à côté de la plaque ? :D

EDIT : pour l'intersection triangle-triangle, il y a ça (http://jgt.akpeters.com/papers/Moller97/tritri.html), mais ... :rolleyes:

themouton
13/03/2007, 11h39
Salut,
pour la physique.
La physique d'une boule est le plus simple, puisque le test se fait sur un rayon.
Ensuite il faudrait faire 2 boules attaché par une tige.
Ensuite pour le cube c'est beaucoup plus complexe.
Car il faut gérer le fait que quand le cube tombe, il peut tourner etc.
L'idée serait peut être de faire un cube où sur les 8 coins tu mets une boule (juste virtuel) et tu les relis par des tiges. Comme ça quand il tombe sur un coin ça simule un balancement comme une boule etc.
Je pense que cette approche serait pas mal.

Après pour un objet, il faut calculer les boite englobante des objets 3D
Il y a 2 possibles, celle qui fait une boite englobante parallèle au plan ( plus facile à calculer)
Ou sinon une vrai, c'est à dire qui suit les rotations etc.
Tout mets tout ça dans un arbre où chaque noeud à sa boite englobante. Comme ça ton monde est dans une boite englobante, un arbre et dans une boite, les feuilles ont leur boites aussi etc.
Comme ça si ton objet qui se déplace rentre dans la boite de l'arbre tu vas tester les boite des feuilles et du tronc pour affiner la recherche de collision.
Après pour faire les testes, tu regarde dans quel boite il se trouve.

Ou sinon tu as le découpage par octree.
Tu découpes ton monde en cube, une recherche sur le net explique le truc.

Mais le cube est pas le plus simple pour le calcul de collision.
Le top c'est la boule. Tu englobes tes objets dans des boules.
Facile à voir si collision ou pas.
Bien sur après quand tu as trouvé dans quel objet tu te trouves tu peux faire une recherche par triangle.
Mais c'est super long. C'est pour ça qu'il faut affiner le plus possible avant.

Je sais pas si je réponds à ta question.

Arialia
15/03/2007, 14h22
J'ai trouvé ça pour ceux que ça intéresse :
http://bulletphysics.com/