cs_DarklordBioopo
Messages postés8Date d'inscriptionlundi 29 mars 2004StatutMembreDernière intervention 4 février 2006
-
2 févr. 2006 à 21:21
barraq
Messages postés89Date d'inscriptionmercredi 25 juin 2003StatutMembreDernière intervention14 septembre 2007
-
5 avril 2006 à 09:22
Bonjour,
Je voudrais savoir comment faire pour avoir une gestion des collisions avec des boites englobantes.
Pour le moment mon jeu ne gere les collisions qu'avec les positions des mesh, et c'est pas terrible.
si quelqu'un a un tutorial ou s'il veut bien me donner les bases.
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 3 févr. 2006 à 01:17
Les boites englobantes AABB (axis aligned bounding boxes) ou OBB (oriented bounding boxes) te permettent de dire si 2 meshes ont des chances d'être en collision, mais pas s'ils sont réellement en collision.
Le plus simple est la AABB. C'est une boite dont les axes sont ceux du repere de la scene. A chaque boucle, tu calcules la boite AABB qui englobe le mesh.
Tu boucles sur les x y et z des vertices de ton mesh et du fait grossir petit à petit la AABB.
Tester si des AABB sont en collision est facile, tu compares les sommets d'une AABB avec les sommets de l'autre:
xminA > xmaxB pas de collision
yminA > ymaxB pas de collision
zminA > zmaxB pas de collision
xminB > xmaxA pas de collision
yminB > ymaxA pas de collision
zminB > zmaxA pas de collision
Qu'entends-tu par "gere les collisions qu'avec les positions des mesh" ?
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 3 févr. 2006 à 12:32
Nan, tu approximes les meshes par une unique boite toute simple dont les axes sont colinéaires à ceux du repère du monde.
Ce n'est donc pas forcement la boite la plus petite qui englobe le mesh telle qu'on l'imaginerait.
Dès que ton mesh a bougé, il faut remettre à jour sa boite englobante AABB.
Une boite englobante est formée de 8 points, mais définie avec 6 valeurs: xmin, ymin, zmin, xmax, ymax, zmax, en gros les 2 points extrêmes appartenant à la grande diagonale "montante".
Tu mets les 2 points de la boite englobante sur le premier sommet de ton mesh, puis tu fais une boucle sur chaque sommet du mesh.
Si le x d'un sommet est plus petit que le xmin de la boite, x->xmin.
Si le x d'un sommet est plus grand que le xmax de la boite, x->xmax.
...idem pour y et z.
Voila, tu as ta AABB.
Pour tester les collisions entre 2 AABB nommées A et B, si xminA est la valeur xmin de la boite A, xmaxA la max, etc...
xminA > xmaxB => pas de collision entre les boites => pas de collision entre les meshes
yminA > ymaxB => pas de collision entre les boites => pas de collision entre les meshes
zminA > zmaxB => pas de collision entre les boites => pas de collision entre les meshes
xminB > xmaxA => pas de collision entre les boites => pas de collision entre les meshes
yminB > ymaxA => pas de collision entre les boites => pas de collision entre les meshes
zminB > zmaxA => pas de collision entre les boites => pas de collision entre les meshes