Previous Next Up Title Contents General Index Functions Index Bookshelf

1.4.4. TRANSFORMATION DE SCÈNE

D'une façon générale, avec la programmation suivante :

Plimit domain;

tdomain (&domain);

tscene (scene_id, &struct_id_list, view_ind);

alors les éléments pset_local_tran et pset_model_clip_vol sont insérés dans la structure scene_id et la matrice passée en paramètre de la fonction pset_local_tran transforme tout point (X,Y) en un point (X',Y') avec

X' = (X-domain.x_min)/(domain.x_max - domain.x_min)

Y' = (Y-domain.x_min)/(domain.x_max - domain.x_min)

et avec la programmation suivante :

Plimit3 domain;

tdomain3 (&domain);

tscene (scene_id, &struct_id_list, view_ind);

alors les éléments pset_local_tran3 et pset_model_clip_vol3 sont insérés dans la structure scene_id et la matrice passée en paramètre de la fonction pset_local_tran3 transforme tout point (X,Y,Z) en un point (X',Y',Z') avec

X' = (X-domain.x_min)/(domain.x_max - domain.x_min)

Y' = (Y-domain.y_min)/(domain.y_max - domain.y_min)

Z' = (Z-domain.z_min)/(domain.z_max - domain.z_min)

En conclusion, si la structure scene_id est postée sur un poste de travail d'identificateur ws_id, le traversal déclenché sur ws_id transformera tout point des structures de la scène dont les coordonnées sont internes au domaine, en un point interne à l'espace [0-1, 0-1, (0-1)] en WC (World Coordinate)

Cette transformation est appelée transformation de scène

Attention : Si le domaine donné n'est pas carré (en 2D) ou n'est pas cubique (en 3D), les données seront déformées lors du traversal par l'action de la transformation de scène (le rapport hauteur/largeur des données n'est pas conservé lors du passage en WC). Pour éviter ce problème, il suffit d'imposer un domaine carré ou cubique coïncidant le plus possible aux données.

Le plus pratique est de choisir en 2D le plus petit carré englobant le rectangle limite des données, et ayant le même centre que ce rectangle:

De même en 3D, le plus pratique est de choisir le plus petit cube englobant le parallélépipède limite des données, et ayant le même centre que ce parallélépipède :

Bien sûr la structure scene_id est modifiable par PHIGS. On peut notamment insérer des fonctions d'attributs en début de structure. Ceux ci seront alors pris en compte par toutes les primitives de toutes les structures de la scène. (cf. portée des attributs )

On peut remarquer en particulier que l'attribut index de vue est positionné en début de structure scene_id : la vue d'index view_ind sera donc utilisée par toutes les primitives de toutes les structures appelées par la scène.


Previous Next Up Title Contents General Index Functions Index Bookshelf