[DirectX] Centre d'une bounding box

Le côté programmation du développement d'un jeu vidéo.

Centre d'une bounding box

Messagepar Kinju » 14 Déc 2005, 19:09

Bonjour à tous,

J'ai un mesh construit depuis le chargement d'un fichier .X
L'origine du mesh n'est pas forcément le milieu de la boite qui l'englobe.
C'est pourquoi je cherche à connaître les coordonnées du centre de la Bounding Box qui l'encadre, dans le repère global.

Seulement j'y arrive pas, c'est trop dur, chaque composante du centre varie selon le yaw, pitch et roll ainsi que la largeur, hauteur et longueur de la boite.

Donc pour chaque composante, je pense bien qu'il y a minimum 9 opération a faire avec des cosinus/sinus. Bref, beaucoup de paramètre, et impossible de déboguer :s

Est-ce que DirectX possède une fonction pour calculer ça, un truc de barycentre ou je sais pas quoi, une fonction ou on rentre les 8 sommet de la boite, et hop il sort le centre, et y'aurai plus qu'à ajouter les composantes du vecteur de position du mesh pour avoir celles du centre dans le repère global.

J'aimerai également faire la même opération, mais pour trouver les coordonnées des 4 points composants la face du dessous.

Merci :)

A bientôt
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12

Messagepar deathangel » 14 Déc 2005, 19:40

justement avec les barycentres, tu devrais y arriver à avoir le centre de ta boite

centrex = (x1 + .. + .. + x8) / 8
centrey = (y1 + .. + .. + y8) / 8
centrez = (z1 + .. + .. + z8) / 8
95% des problèmes informatiques se situent entre la chaise et le clavier
--> Créez votre robot chien : http://doggyproject.free.fr/
--> Gagnez des PACK+ gratuitement : http://www.packbarre.com/
--> S.U.S Tennis de table http://www.sus.asso.fr
Avatar de l’utilisateur
deathangel
Hello World, I'm new !
 
Messages: 963
Inscription: 10 Avr 2005, 08:50
Localisation: Strasbourg

Messagepar Lenolian » 14 Déc 2005, 20:37

It te suffit de connaître deux coins opposés de ta bounding box. Le centre de celle-ci est alors le milieu du segment reliant ces deux points.
J'ai toujours raison, même quand j'ai tort car alors j'ai raison d'avoir tort.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar grob1212 » 15 Déc 2005, 11:12

Tiens, ca me rappelle que j'avais une question sur le sujet : D3D possède une fonction pour calculer la bounding box d'un mesh et j'aurais aimé savoir si quelqu'un sait comment celle-ci est-elle calculée, est-ce une méthode ACP ou un quelque chose dans le genre ?
grob1212
Hello World, I'm new !
 
Messages: 277
Inscription: 13 Avr 2005, 15:12

Messagepar Loulou » 15 Déc 2005, 12:57

A mon avis ce n'est pas plus compliqué que de parcourir tous les sommets en recherchant les composantes extrêmes sur chaque axe.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar grob1212 » 15 Déc 2005, 15:24

Loulou a écrit:A mon avis ce n'est pas plus compliqué que de parcourir tous les sommets en recherchant les composantes extrêmes sur chaque axe.


Considérer simplement les extremums sur les axes est insuffisant, je pense tout du moins, puisqu'elle devrait changer si le mesh est disposé dans une autre orientation.
grob1212
Hello World, I'm new !
 
Messages: 277
Inscription: 13 Avr 2005, 15:12

Messagepar Loulou » 15 Déc 2005, 15:35

Comprends pas ce que tu veux dire.

Le calcul de la boîte englobante ne tient pas compte des transformations qui sont appliquées aux meshes.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar teto » 15 Déc 2005, 20:11

J'avais réfléchi à ta question grob car je rencontre le mm pb et j'avais pensé à faire comme loulou.
Tu cherches le parallepipede à travers les sommets les plus extremes puis après tu calcules le milieu de la grande diagonale.
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar Lightness1024! » 15 Déc 2005, 20:54

que ce soit une axis oriented BB ou bien axis aligned BB le milieu d'une diagonale c'est toujours le milieu d'un parrallélepipede alors ou c bien balourd tout ca, ou alors le probleme est mal énoncé.
Avatar de l’utilisateur
Lightness1024!
Hello World, I'm new !
 
Messages: 698
Inscription: 11 Avr 2005, 12:00
Localisation: paris

Messagepar Kinju » 15 Déc 2005, 22:32

Ouais voilà, quand on récupère la bounding box, on a 2 vector représentant le point devant, en haut à droite (max) et derrière en bax a gauche (min)

Avec ça on peut avoir les coordonnées LOCALES de chaque sommets de la boite.

J'ai trouvé le truc. Faut récupérer le point qui nous intéresse en local, et lui appliquer les même transformation qu'on a appliqué au mesh pour obtenir les coordonnées générales.

Que ça soit le centre ou n'importe quel autre point, le procédés est le même
Kinju
Hello World, I'm new !
 
Messages: 60
Inscription: 19 Nov 2005, 08:12

Messagepar grob1212 » 16 Déc 2005, 10:19

Loulou a écrit:Comprends pas ce que tu veux dire.

Le calcul de la boîte englobante ne tient pas compte des transformations qui sont appliquées aux meshes.



Je vais (tenter :) ) de me faire comprendre : ce que je cherche en fait, c'est à trouver la bounding box qui minimise la différence entre le volume de la BB et celui de l'objet. Si on considère un objet qui, dans son repère local, est dans une position quelconque non alignée avec les axes, alors la BB alignée sur les axes du repère local n'est pas optimale au sens du critère énoncé ci-dessus.


Et là ca va mieux, mon explication ? (sinon je ferais un schéma...)
grob1212
Hello World, I'm new !
 
Messages: 277
Inscription: 13 Avr 2005, 15:12

Messagepar Loulou » 16 Déc 2005, 10:22

Ok, donc tu veux une OBB. D3DX lui te calcule une AABB.

Concernant l'algorithme à utiliser, je suppose que Google peut t'aider.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar grob1212 » 16 Déc 2005, 10:36

Loulou a écrit:Ok, donc tu veux une OBB. D3DX lui te calcule une AABB.

Concernant l'algorithme à utiliser, je suppose que Google peut t'aider.



Merci, c'est plus clair lorsque l'on a la terminologie du domaine...
grob1212
Hello World, I'm new !
 
Messages: 277
Inscription: 13 Avr 2005, 15:12


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 28 invités

cron