• Aucun résultat trouvé

B.1 Projection d'une bo^ te orthogonalement a la diagonale principale

4.3 Bo^ tes englobantes generalisees

Nous allons tout d'abord presenter dans cette section la notion detranche d'espace, qui est la notion de base de notre algorithme, puis celle de bo^ te generalisee. Nous indiquerons ensuite comment ces bo^ tes sont calculees, et tout particulierement la gestion des transformations anes et des operations booleennes.

4.3. BO ^ ITESENGLOBANTESG  EN  ERALIS  EES 61

4.3.1 Tranche d'espace

Rappelons ce concept introduit au chapitre 3 pour realiser les intersections avec un cube.

Une tranche d'espace est par denition une partie de l'espace comprise entre deux plans paralleles. Elle est completement denie par la donnee d'un vecteur ~V de R

4et d'une constante negative . A un point p de l'espace correspond un vecteur ~P deR

4. Le point p appartient a la tranche si et seulement si < ~V  ~P > 0 ou < :: > designe le produit scalaire deR

4.

4.3.2 Bo^te generalisee

Une bo^ te generalisee est simplement denie comme etant l'intersection de trois tranches d'espace. Les trois tranches ont comme seule contrainte d'avoir des vecteurs qui forment un systeme libre. En particulier, rien n'impose aux tranches d'avoir des vecteurs deux a deux orthogonaux, ou encore d'^etre colineaires a des directions privilegiees.

Ainsi, la denition et le stockage de tels englobants est assez simple: il sut de prevoir le stockage de trois vecteurs deR

4et de trois constantes, soit quinze valeurs au total.

Enn, la fonction de calcul d'intersection avec une bo^ te est tres semblable a celle utilisee pour un cube, et consiste a intersecter successivement les trois tranches en tronquant a chaque intersection le segment d'etude. Aucun intervalle d'intersection n'est cependant genere.

4.3.3 Transformations anes des bo^tes

Le resultat essentiel est le suivant: si (~V  ) est une tranche d'espace contenant un objet A, si T est une transformation ane, alors la tranche d'espace (tT;1(~V ) ) est une tranche d'espace contenant T(A).

Ainsi, il est tres simple de calculer la bo^ te du transforme d'un objet : c'est tout simplement la bo^ te dans les trois tranches sont obtenues a partie des tranches de la bo^ te initiale par la transformation indiquee ci-dessus.

On peut alors constater que, en dehors des imprecisions d^ues a la machine (erreurs d'arrondis dans les calculs), il n'y a aucune perte en precision lors des transformations anes sur les englobants.

4.3.4 Operations booleennes sur les bo^tes

Dans cette section, G designe l'operande gauche de l'operation booleenne et D l'operande droit.

4.3.4.1 Union

C'est certainement le cas le plus complexe. Le principe de l'algorithme est le suivant:

{ on commence par determiner les huit sommets de la bo^ te de G et les huit sommets de la bo^ te de D.

{ on eectue une phase de marquage, qui consiste a marquer les tranches de G qui contiennent les huits points de la bo^ te de D, et celles de D qui contiennent les huits points de la bo^ te de G. { plusieurs cas peuvent alors se presenter :

{ l'une des bo^ tes a toutes ses tranches marquees, ce qui signie que cette bo^ te contient l'autre, et l'union est simplement la plus grande des deux.

{ l'une des bo^ tes possede deux tranches marquees, auquel cas on fabrique une nouvelle bo^ te dont les deux premieres tranches sont les tranches marquees et dont la troisieme est obtenue a partir de la tranche non marquee en l'agrandissant de facon a ce qu'elle contienne les huits points de l'autre bo^ te.

{ aucune des tranches n'est marquee, auquel cas on utilise une technique d'analyses en com-posantes principales (ACP) sur les seize points obtenus. Cette ACP donne trois directions privilegiees et il ne reste alors qu'a calculer les constantes de denition de facon que la bo^ te contienne les seize points.

{ si une bo^ te possede une tranche marquee, on utilise une technique similaire d'ACP mais bidimensionnelle apres projection orthogonale sur un plan parallele au plan de la tranche marquee.

On peut remarquer que dans ces deux derniers cas, les vecteurs des tranches sont deux-a-deux orthogonaux (c'est une propriete de l'ACP).

4.3.4.2 Intersection

Dans ce cas, on calcule une bo^ te a c^otes paralleles aux tranches de G qui contiennent G\D, ainsi qu'une bo^ te a c^otes paralleles aux tranches de D. On retient la bo^ te de volume minimal.

4.3.4.3 Dierence

C'est le cas le plus simple, la bo^ te associee a GnD est la bo^ te de G.

4.3.5 Utilite des englobants

Le test d'intersection entre un rayon et une bo^ te generalisee, s'il est rapide, prend quand m^eme un certain temps (le m^eme temps que pour intersecter un cube). On a donc tout inter^et a essayer de diminuer ce nombre de tests.

Ceci est par exemple possible lorsque l'on intersecte un rayon avec un n!ud de type transformation ane. Si l'on intersecte la bo^ te transformee, il est tout a fait inutile de tester le rayon avec la bo^ te initiale: il n'y a en eet pas de perte de precision lors des transformations anes.

De m^eme, lors que l'on teste un rayon avec une bo^ te d'un n!ud de type intersection, il est inutile de tester les bo^ tes des objets que l'on intersecte : s'il y a intersection avec l'intersection des bo^ tes, il y a necessairement intersection avec chacune des bo^ tes. Similairement, lorsque qu'un rayon intersecte une bo^ te associee a un n!ud dierence, il n'est pas necessaire de tester la bo^ te de l'objet qui subit cette dierence : c'est la m^eme bo^ te. Enn, pour les noeuds de type union, il est possible que la bo^ te de l'union soit l'une des deux bo^ tes initiales et il est encore inutile de retester cette intersection.

On utilise dans ce but la notion d'utilite de bo^te englobante. Cette utilite est notee sur chaque n!ud pour les bo^ tes du ou des n!uds qui sont juste sous le n!ud considere. Elle est calculee en m^eme temps que les bo^ tes elles-m^emes et elle indique lesquelles parmi les tranches de la bo^ te consideree sont a tester. Il faut ainsi noter que l'utilite n'est pas denie pour une bo^ te a priori, car elle depend du chemin d'acces dans l'arbre de modelisation. Il est alors naturel de stocker cette utilite courante dans la structure d'environnement dont se sert l'intersecteur (voir le chapitre 3).

4.3.6 Deux principes d'acceleration

On utilise encore les deux techniques suivantes pour essayer d'ameliorer l'ecacite de l'intersecteur : { apres un test d'intersection positif entre un rayon et une bo^ te associee a un n!ud de type intersec-tion, on tronque l'intervalle de recherche minmax] aux abscisses contenues dans la bo^ te: ceci evite de retenir des intersections que l'on est s^ur de voir eliminees lors du calcul d'intersection des listes d'intersection. Sur l'exemple de la gure 4.1, on doit intersecter l'objet A\B. La bo^ te englo-bante est representee par la partie grisee. On ne genere alors pas le premier intervalle d'intersection avec l'objet A, car il est en dehors de la bo^ te.

4.4. QUELQUES R  ESULTATS 63 A B R R\A

Fig.4.1 {Elimination des intersections inutiles

methode scene objets touches bo^ tes touchees ecacite temps

BEG un_cube 12960 12960 1. 11s

BEG deux_cubes 32 1420 0.0255 9.5s

STD un_cube 12960 40656 0.319 13.85s

STD deux_cubes 32 53616 0.000597 15.8s

Tab. 4.2 {Comparaison des 2 types de bo^tes englobantes

{ lorsque l'on intersecte un n!ud de type union, et que l'on ne demande que la premiere intersection, on eectue un test a priori entre le rayon et les bo^ tes des deux operandes de cette reunion: on commence alors par intersecter l'operande dont la bo^ te englobante est la plus proche.

4.4 Quelques resultats

Nous avons compare les deux methodes (bo^ tes englobantes classiques et bo^ tes generalisees) sur deux scenes-test. La premiere scene (un_cube) contient un unique cube dont la diagonale principale est colineaire a l'axe Ox. La seconde scene (deux_cubes) contient deux petits cubes de c^ote 0.05, l'un centre en (-5,-5,-5) et l'autre centre en (10,10,10). Les deux images ont ete calculees en resolution 320x256, et seuls les rayons primaires ont ete generes. Le tableau 4.2 regroupe les resultats obtenus. On constate que dans le cas de la premiere scene, on obtient une ecacite de 1, ce qui correspond a la non-perte de precision lors des transformations anes, alors que les bo^ tes classiques induisent une ecacite de 0.319 seulement. Notons que les temps ne sont pas proportionnels dans ce cas a l'ecacite, car ces temps incluent toutes les initialisations ainsi que les calculs d'intersection proprement dits, ces derniers etant communs aux deux methodes.