PDA

Voir la version complète : Centre d'une bounding box


Kinju
14/12/2005, 18h09
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

deathangel
14/12/2005, 18h40
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

Lenolian
14/12/2005, 19h37
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.

grob1212
15/12/2005, 10h12
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 ?

Loulou
15/12/2005, 11h57
A mon avis ce n'est pas plus compliqué que de parcourir tous les sommets en recherchant les composantes extrêmes sur chaque axe.

grob1212
15/12/2005, 14h24
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.

Loulou
15/12/2005, 14h35
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.

teto
15/12/2005, 19h11
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.

Lightness1024!
15/12/2005, 19h54
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é.

Kinju
15/12/2005, 21h32
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

grob1212
16/12/2005, 09h19
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...)

Loulou
16/12/2005, 09h22
Ok, donc tu veux une OBB. D3DX lui te calcule une AABB.

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

grob1212
16/12/2005, 09h36
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...