Accueil > Forum > > > > Gestion des collisions
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
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|