Manuel de maintenance du Surfelizer

Bruno FISCHEL - Karine NGUYEN - Vincent THOREL - Pierre-Jean TURPEAU - Frédéric VIDIL

15 juin 2001


Table des matières

Introduction

Le manuel de maintenance est un outil d'aide à la compréhension du code source du Surfelizer. Ce manuel sera utile dans les cas suivants:



Ce programme de surfelisation a été implémenté en langage C. Les modules. Donc ce programme est portable sur toute les architectures ou notre version de PovRay (la 3.1) à été testé: Linux, Unix, DOS, Windows, Amiga et Macintosh.

Les répertoires du Surfelizer sont organisés comme suit:


Mise en place du Court-circuit de PovRay

Dans notre Surfelizer, nous avons utilisé les sources de PovRay. Les structures et les méthodes permettant de les allouer en mémoire nous étant inconnues, nous avons choisi cette solution:

Dans l'imposant main() de PovRay il apparaît les phases suivantes:



Afin d'avoir notre propre main() et pour effectuer des opérations conforme aux attentes des fonctions de PovRay, voici les dispositions qui ont été prises:


Surfelisation d'une scène de Povray

La surfélisation d'une scène est réalisé dans le fichier main.c du Surfelizer, les 2 modes de surfélisations sont les suivants:


Analyse en grille de rayons de la scène

Cette partie gère le principal objectif du projet et se trouve dans la fonction three_waves_surfelization(), en voici le code LDA:


(XMin,     XMax,    YMin,     YMax,    ZMin,     ZMax)    $\leftarrow$BoiteEnglobante ( Scène ) 

(XStep, YStep, ZStep)$\leftarrow$ calculPas(parametresUtilisateur);
Pour x de XMin à XMax par XStep faire
Pour y d YMin à YMax par YStep faire
Rayon $\leftarrow$ rayonNouveau ( ... )
Calculer les intersections, leurs normales, et leurs couleurs
et les enregistrer: throw_ray ( ... ).
Fin pour
Fin pour

Analyse par traitements successifs des polygones

Ce traitement est réalisé dans triangles_surfelization(), l'algorithme est le suivant:


Pour tout x étant donné un objet ``triangle'' de la scène faire 

b $\leftarrow$ calculerBarycentre(x);
repère $\leftarrow$ calculerRepèreCalquéSurTriangle(x)
(UMin, UMax, VMin, VMax) $\leftarrow$ calculerRectEnglob(x,repere)
Pour u de UMin à UMax par Step
Pour v de VMin à VMax par Step
Rayon $\leftarrow$ rayonNouveau ( ... )
Calculer l'intersection, sa normale, sa couleur
et l'enregistrer.
Fin pour
Fin pour
Fin pour

Remarquons que le parcours des objets en triangle d'une scène PovRay est plus compliqué qu'il n'y paraît: la structure des objets étant une arborescence, ce parcours est en réalité un parcours en profondeur d'un arbre avec élimination des objets non triangulaires. Les fonctions réalisant ce parcours sont les suivantes: pov_deep_course_init() et pov_deep_course_get_next().

Correction de l'orientation des normales

Durant le calcul d'un surfel, dans le cas des objets CSG, sa normale peut pointer vers l'interieur de l'objet. Le cahier des charges imposant que les surfels soient orientés vers l'exterieur, nous avons fait appel à la fonction inside() qui permet de corriger leur orientation. Cette correction s'effectue dans la fonction pov_compute_normal_vector() du fichier pov_interface.c. Après chaque calcul d'intersection, nous appelons cette fonction qui corrige l'orientation de la normale si besoin est. La figure suivante illustre nos propos:

Figure 3.1: Orientation des normales à un objet
\includegraphics[width=1\linewidth,angle=0]{normales.eps}

Evolution de PovRay

Si une éventuelle mise à jour de PovRay le rend incompatible avec le surfelizer, alors le module pov_interface.c permet de réécrire le corps des fonctions appelées par le Surfelizer sans modifier leur signature.

De plus, le site web http://tag.povray.org/ est mis à disposition pour tout problème concernant les techniques et algorithmes employés dans PovRay.



Pierre-Jean 2002-04-01