begin process at 2012 02 09 21:49:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

Oriented Bounding Boxes


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

Oriented Bounding Boxes

dimanche 1 octobre 2006 à 20:13:07 | Oriented Bounding Boxes

DarkBoss

Bonjour tout le monde,
J' ai une petite question pour certains, une grande pour d' autres ( comme moi ^^ ).
J' aimerais savoir comment effectuer une "rotation d' une bounding box", comme une OBB.
En fait j' ai deja lu pas mal de trucs la dessus, et sa a l' air compliqué, covariance de matrice ( kézako ? ) etc...
La situation est la suivante:
J' ai mon niveau dans lequel ce trouve un bloc, comme mon niveau est exporté par un script d' export GMAX,
dans mon "moteur 3d" il faut que j' effectue une rotation de -90° sur l' axe des x; cependant je calcul
ma bouding box, et quand je lance mon jeu, la bounding box a garder le bloc du départ ( non rotaté ) comme model.
Alors ma question est la suivante, comment implémenté simplement une oriented bounding box sans space partitionning
pour faire une "rotation de la bounding box".
C' est très confu et j' en suis désolé.
Merci beaucoup car je galère un peu la dessus.
A+

DarkBoss
dimanche 1 octobre 2006 à 20:43:18 | Re : Oriented Bounding Boxes

luhtor

Tu dois pouvoir gérer les rotations suivant les 3 axes pour n'importe quels angles ?
Le bounding sphere suffit pas ?
T'as quel niveau d'étude (de maths surtout) ?


dimanche 1 octobre 2006 à 20:59:08 | Re : Oriented Bounding Boxes

DarkBoss

luhtor, merci de me repondre, a chaque fois que je poste une question de graphisme tu es la pour me guider mon gouroux ^^
alors je suis en terminale ES, je pense que ca devrais suffire ( lol ), non plus serieusement, la bouding sphere ne suffiras pas car j' ai besoin de detecter les collisions avec
murs, sols, objets( la ca suffira ).
Pour les axes si j' ai bien compris oui j' aimerais pouvoir gérer cela.
DarkBoss
dimanche 1 octobre 2006 à 21:38:53 | Re : Oriented Bounding Boxes

luhtor

Ah bon :) c'est vrai que c'est plutot mon domaine opengl :) mais je fais pas attention au nom de la personne à qui je réponds ^^

C'est sur que pour les murs, le bouding sphere ne suffit pas.
Terminale ? donc ca veut dire qu'une matrice de rotation, tu vois pas trop ce que c'est. Enfin on peut utiliser (plus simplement ?) les produits scalaires, mais la encore, je suis pas sur que tu saches ce que c'est exactement ? (faut attendre l'année prochaine pour ca)
Une bounding box ca peut se définir avec un centre (du pavé), une base liée au pavé (3 vecteurs unitaires), et les 3 dimensions du pavé. Ensuite apres un premier bouding sphere pour éliminer la plupart des cas. Tu peux à l'aide de plusieurs produits scalaires tester s'il y a collision ou non.

Mais si la rotation suivant l'axe verticale suffit (suffit elle dans ton cas ?), c'est bcp plus simple.

dimanche 1 octobre 2006 à 21:50:19 | Re : Oriented Bounding Boxes

DarkBoss

Alors j' ai quelques base, normalisation, produit scalaire, vecteur unitaire je ne suis pas sur mais cela peut ce trouver, mais j' aimerais surtout en fait c' est faire comme un glRotateF, mais pour ma bounding box; je m' explique, glRotatef permet de faire une rotation visuel, moi j' aimerais faire une rotation de coordonnée c' est a dire que les coordonnée soient transformées comme si elles avaient subient une rotation.
Je ne sais pas si cela est possible par contre.
Pour les precision, mes bounding boxes sont définies par xmin xmax ymin ymax zmin zmax mais je n' ais pas le barycentre, je peux cependant rajouter un barycentre dans ma structure ca ne me gene pas mais je ne vois pas a quoi cela servirais, donc si tu pouvais m' expliquer ou meme me faire découvrir du code pur, pas du meta code j' en serait comme tout heureux ;)

DarkBoss
dimanche 1 octobre 2006 à 22:34:50 | Re : Oriented Bounding Boxes

luhtor

Bas oui glRotatef ca multiplie par une matrice de rotation. Mais je suis dsl, mais je vois pas comment te l'expliquer. Dans tous les cas, tu auras besoin du centre de ton bounding.
Tu pourrais utiliser opengl pour te calculer la matrice:
- tu charges la matrice identité
- tu fais les rotations que tu veux
- tu récupères la matrice que tu stokes dans un tableau

Soit P le centre de ton pavé, et M le point que tu veux tester.
Le vecteur PM multiplié par l'inverse de la matrice (ici la transposée de la matrice que tu as récupérés) te donne un nouveau vecteur qui correspond aux coordonnées du point M dans la base lié au bouding. Soit R ce vecteur. Apres c'est tout simple:
si abs(R.x) < demi coté selon x et abs(R.y) < demi coté selon y et abs(R.z) < ...
alors le point M est dedans donc en collision.

Mais avec les produits scalaire c'est plus efficace: (toujours avec la matrice récupérée de opengl), soit U1, U2, U3 les colonnes 1 et 2 et 3 de la matrice. C'est en fait les vecteurs de la base liée au bounding.
Soit P le centre de ton pavé, et M le point que tu veux tester.
Si abs(PM scalaire U1) < coté selon U1 et abs(PM scalaire U2) < coté selon U2 et ...
alors collision.


dimanche 1 octobre 2006 à 22:49:29 | Re : Oriented Bounding Boxes

DarkBoss

Hum, je vois mieux pourquoi tu me demandais quel niveau j' avais en maths .
Moi je voudrais juste que la bbox se retrouve orientée de la même manière que mon bloc,
c' est peut - etre ce que tu as voulu me dire lol mais je ne comprend pas tout en fait en gros j' aimerais faire une rotation d' un pavé comme le fait opengl,
a paramant c' est ce que tu me dis, mais abs c' est quoi comme fonction ? et comment récupérer les colonnes 1-2 et 3 de la matrice ?

DarkBoss
dimanche 1 octobre 2006 à 23:00:21 | Re : Oriented Bounding Boxes

luhtor

a pardon, abs (c'est connu) c'est "valeur absolue".
Mais ce que tu veux, c'est ce que j'essais de t'expliquer :) Tourner un cube c'est pas dure, mais faut pouvoir tester les coordonnées apres pour la collision.

Une matrice c'est un tableau de 16 valeur. Soit T ce tableau. La première colonne, c'est T[0], T[4], T[8], T[12] c'est pas compliqué :)

Le produit scalaire tu connais ?


dimanche 1 octobre 2006 à 23:01:05 | Re : Oriented Bounding Boxes

luhtor

Enfin tout ce que je te racontes, c'est simple. Tu verras ca l'année prochaine en prepa ou fac scientifique.
mardi 3 octobre 2006 à 18:51:55 | Re : Oriented Bounding Boxes

DarkBoss

ok lol donc cen gros faut deja que j' aprenne quelques trucs sur les matrices etc...
je me demandais si c' etait pas plus simple de lancer un rayon et de voir si quelque chose le traverse
et s' il le traverse a une distance trop proche -> collision ?!

DarkBoss

1 2

Cette discussion est classée dans : box, rotation, boxes, bounding, oriented


Répondre à ce message

Sujets en rapport avec ce message

Bounding boxes : Comment faire [ par norton ] Hello, j'ai essayé quelques techniques mais sans succès... Quelqun peut m'aider car je début en opengl...Si vous avez un ptit code chuis preneur ;) va Tracer des axes en fonction de chiffres entrées dans l'édit box [ par MasterShadows ] Salut à tous.Bon, voilà mon problème: je suis toujours en train de développer mon prog de traceur d'équations, mais depuis 3 mois, je bloque sur la de CRecordset et Combo Box [ par DraaFil ] Bonjour à tous,Voici mon problème:J'ai une bd access qui est loader dans mon view. j'ai une autre fenetre qui à un combobox. Voici le problème, je veu Rotation et origine [ par goutbouyo ] Salut, Salut, Je veut faire une fonction réseau sur mon jeu, donc il faut que je représente les persos ennemies. Pour cela, je prends les coordonnés e Probleeme avec mon COMBO BOX [ par DraaFil ] Hé oui, encore moi!Premièrement, une liste d'item est loader dans mon comboBox. Je suis à la recherche de la fonction qui execute lorsque j'ai choisi rotation avec les fleches [ par piopium ] voici mon pbj'ai declarer un cube jusque la tt va bienmais je ve le faire tourner grace au flechesdonc je metvoid Fleches(int key, int x, int y){ Problème avec GetWindowTextLenght [ par oceax ] Bonjour !!Voilà je suis débutant en c++ et je voudrais me familiariser avec l'utilisation de l'allocation dynamique de la mémoire. Pour mon projet j'a BS_GROUPBOX ??? [ par SnOOpss ] bonjour je suis en train de me refaire des classes pour les dialogs et je butte sur les group box ( le cadre )!Impossible de changer leur couleur alor Rendre inactifs tous les radio boutons d'une Group Box apres avoir cliqué sur l'un des radio boutons. VC++ [ par ninouch ] J'ai crée une group Box dans laquelle j'ai mis 6 radio boutons.Ils fonctionnent très bien mais j'aimerais les rendre inactifs dès que l'on a cliqué su Bip lors de l'utilisation du clavier sur une picture box [ par ROnE91 ] Bonjour,     J'ai une appli programmée avec l'api win32 avec un hook sur le clavier qui marche lorsque que le focus est sur une picture box.      Le


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,811 sec (3)

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