begin process at 2010 02 09 17:31:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

DirectX

 > 

Gestion des collisions


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gestion des collisions

jeudi 2 février 2006 à 21:21:29 | Gestion des collisions

DarklordBioopo

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.

merci
vendredi 3 février 2006 à 01:17:41 | Re : Gestion des collisions

Galmiza

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" ?
vendredi 3 février 2006 à 06:48:32 | Re : Gestion des collisions

DarklordBioopo

C'est a dire que je prend la position des meshs

vPosition.x et vPosition.z

et je test si il est inferieur a la position de l'autre.
ex :

if(vPositionObjetA.z <= vPositionObjetB.z + 10.0f && vPositionObjetA.x <= vPositionObjetB.x + 30.0f && vPositionObjetA.x >= vPositionObjetB.x - 10.0f)



vendredi 3 février 2006 à 12:32:30 | Re : Gestion des collisions

Galmiza

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 Quelques liens sympas. http://www.toymaker.info/Games/html/collisions.html http://www.nofrag.com/2004/oct/23/14529/
samedi 4 février 2006 à 08:18:31 | Re : Gestion des collisions

DarklordBioopo

Merci, mais je ne sais pas comment creer une bounding box, peux tu m'aider stp?


samedi 4 février 2006 à 10:53:51 | Re : Gestion des collisions

Galmiza

struct SBoundingBox { D3DXVECTOR3 vec3Min; D3DXVECTOR3 vec3Max; }; Tu ajoutes un objet aabbBoundingBox de SBoundingBox à chacun de tes objets dont tu veux gérer les collisions. si tes points sont sous dans un tableau de la forme: pSommets = new D3DXVECTOR3[nbSommets]; Alors tu construits ta bounding box ainsi: aabbBoundingBox.vec3Min = pSommets[0]; aabbBoundingBox.vec3Max = pSommets[0]; for (int i=1; i pSommets[i].x) aabbBoundingBox.vec3Min.x = pSommets[i].x; if (aabbBoundingBox.vec3Min.y > pSommets[i].x) aabbBoundingBox.vec3Min.y = pSommets[i].y; if (aabbBoundingBox.vec3Min.z > pSommets[i].x) aabbBoundingBox.vec3Min.z = pSommets[i].z; if (aabbBoundingBox.vec3Max.x < pSommets[i].x) aabbBoundingBox.vec3Max.x = pSommets[i].x; if (aabbBoundingBox.vec3Max.x < pSommets[i].y) aabbBoundingBox.vec3Max.y = pSommets[i].y; if (aabbBoundingBox.vec3Max.x < pSommets[i].x) aabbBoundingBox.vec3Max.z = pSommets[i].z; } Et apres pour tester approximativement les collisions entre 2 meshes: bool Collision(CMesh *mesh1, CMesh *mesh2) { if (mesh1->aabbBoundingBox.vec3Min.x > mesh2->aabbBoundingBox.vec3Max.x) return false; if (mesh1->aabbBoundingBox.vec3Min.y > mesh2->aabbBoundingBox.vec3Max.y) return false; if (mesh1->aabbBoundingBox.vec3Min.z > mesh2->aabbBoundingBox.vec3Max.z) return false; if (mesh2->aabbBoundingBox.vec3Min.x > mesh1->aabbBoundingBox.vec3Max.x) return false; if (mesh2->aabbBoundingBox.vec3Min.y > mesh1->aabbBoundingBox.vec3Max.y) return false; if (mesh2->aabbBoundingBox.vec3Min.z > mesh1->aabbBoundingBox.vec3Max.z) return false; return true; } Je n'ai pas testé mais ça devrait marcher. Bonne chance !
mercredi 5 avril 2006 à 09:22:55 | Re : Gestion des collisions

barraq

Sinon tu peux regarder sur :

http://www.newtondynamics.com

Moi je commence un peux a développer avec Ogre et plusieur wrapper existe comme :

OgreODE, nxOgre, OgreNewt, etc...

sa peux etre interessant de regrder, un jolie code exemple peut etre trouver ici :

[ Lien ]

Bon courage pour comprendre par contre, sa prend un peu de temps.

Voila, jespere que sa t'aidera un peux

cheer, barraq



Cette discussion est classée dans : gestion, collisions


Répondre à ce message

Sujets en rapport avec ce message

Moteur 3D, gestion des collisions [ par fabienGL ] Bonjour, je vous écris car j'ai 2 question :1)OpenGL c'est une librairies graphiques, pourtant entends-t-on parler de moteurs 3D j'aurais aimé savoir Gestion de collisions [ par cosmosis72 ] Bonjour a tous.Je viens sur votre forum car à force de chercher je me retrouve plus embrouiller qu'au début. JE vous expose mon problème.Je souhaite c Gestion des collisions pour un FPS [ par dd1840x ] Salut tt le monde , j'aimerais faire un FPS, mais je ne sais pas gérer les collisions...Merci de me dire comment faire ! (pas de site en anglais SVP) Projet : gestion client [ par barraq ] Salut a tous : Bon voila, je dois faire une projet pour une boite, en gros se serra un logiciel qui permettra de rentrer, gerer des commandes / client Prob gestion des touches Win32 Unicode [ par raton ] Salut a tous.Voila je suis en train de dev une app pour un scanner (genre ce qu'utilise les caissieres mais avec des touches dessus) et j'ai un petit Gestion Memoire Windows [ par victorcoasne ] Bonjour, Je fais un programme qui mange énormément en ressources (+ de 5Mo au départ) et qui augmente un peu. Je réduis la fenêtre et la restaure et Gestion des messages windows pour des fenêtres - pointeurs de fonctions [ par neodelphi ] Bonjour tout le monde Je suis en train de faire un programme qui utilise directX et qui doit créer une fenêtre windows. J'ai suivi les exemples que reservation de la memoire [ par khalid_trunks ] salut ts le monde.je debute en c++,j'ai fais une petite simple application( gestion d'appelles)....je sais po grand chose en c++.ben j'ai fais mon pro capet éco-gestion option informatique [ par alain34270 ] bonjour,je souhaite présenter ma candidature au capet informatique (capet informatique et gestion, option informatique).Cependant, il est aujourd'hui


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales