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
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
ALGORITHMESALGORITHMES par whayoub
Cliquez pour lire la suite par whayoub
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|