Satimage Précédent | Suivant
La view3D
Accueil Documentation SmileLab Scripting Les objets graphiques Graphic view View3D  
Table des matières
Introduction
La classe view3D concerne les représentations en 3D. Les view3D peuvent contenir : SmileLab met en œuvre une représentation 3D par projection orthographique avec rendu de surface réaliste.

Une manière simple de dessiner des view3Ds est d'utiliser QuickPlotLib :

QuickPlotLib

Comment les view3D gèrent l'affichage 3D
limits
Les view3D affichent une portion d'un espace 3D correspondant à un parallélépipède rectangle dont les sommets sont définis par les valeurs {xmin, xmax, ymin, ymax, zmin, zmax}, qui correspondent à la propriété limits (ou la propriété current limits si l'une des valeurs de limits est à auto).
Les view3D transforment ce parallélépipède dans un espace OpenGL en un cube unitaire de coordonnées {-0.5, 0.5, -0.5, 0.5, -0.5, 0.5}.
eye position
La position et l'orientation de l'observateur est défini par la propriété eye position, une liste {x, y, z, ux, uy, uz} dont les trois premières valeurs correspondent à la position (dans le repère OpenGL) et les trois autres valeurs définissent comment sera le plan vertical. Lorsque vous définissez la propriété eye position vous pouvez vous contenter de ne passer que les trois premières valeurs {x, y, z}. Dans ce cas, la direction de l'observateur sera définie comme pointant vers le centre du cube unitaire.
projection
Comme pour une caméra, l'observateur ne voit qu'un sous-domaine de l'espace OpenGL. Dans son propre système de coordonnées, l'observateur voit un parallélépipède (la projection étant parallèle) dont les coordonnées sont définies par la propriété projection. Par défaut, projection est mis à {-1, 1, -1, 1, 1, 100}, la dernière paire de valeurs {1, 100} correspondant à la définition du point le plus proche ("near") et du point le plus lointain ("far") dans la direction des axes de la vue. Les objets du parallélépipède sont projetés dans le rectangle {-1, 1, -1, 1} qui à son tour est projeté sur le plot frame de la view 3D.
light position
Une source lumineuse dont la position est définie par la propriété light position éclaire la scène. light position est une liste de quatre nombres {x, y, z, u}, à savoir les coordonnées x, z, y dans l'espace de projection (dans le repère OpenGL) qui définissent la direction d'où vient la lumière, et u qui est l'inverse de la distance de la source depuis l'origine du cube unitaire, en coordonnées OpenGL.
rotation
OpenGL définit les directions x et y dans le plan de projection et z comme la normale à ce plan (dirigé vers l'observateur). SmileLab effectue une rotation sur tous les objets -- après les avoir définis dans le cube unitaire -- de façon à ce qu'ils apparaissent normalement, avec la direction z vers le haut. Cette rotation est définie par la propriété rotation, une liste de quatre nombres { a, vx, vy, vz}a est l'angle de rotation en degrés, et vx, vy, vz les coordonnées de l'axe de rotation. Par défaut, la propriété rotation est mise à {-120.0, 1.0, 1.0, 1.0}. Avec ces valeurs, les définitions de eye position et light position correspondent à des listes {y,z,x} dans le système de coordonnées des surfaces (du fait que eye position et light position sont définis dans le repère OpenGL et non dans le repère de l'utilisateur).
Utilisation des paramétrages de rendu 3D
eye position
Pour bouger le point de vue, définissez la propriété eye position avec une liste {x, y, z}. Vous pouvez définir en plus l'orientation en passant six valeurs {x, y, z, ux, uy, uz}.
La caméra ne voit que les objets suffisament loins (au-delà d'une unité de longueur selon l'axe de la vue). Le centre du cube unitaire (l'origine absolue en coordonnées OpenGL) doit être à une distance unitaire du bord du parallélépipède. Par conséquent, l'observateur doit être à une distance au moins égale à deux unités de longueur du centre du cube. Si vous définissez eye position plus près, par exemple à {1.0, 1.0, 0.0}, les objets peuvent apparaître coupés, par exemple lorsque vous effectuez une rotation de la view3D avec la souris (⌘-déplacer) : en effet, la rotation de la view3D avec la souris ne change pas la distance de la view3D.
projection
Vous pouvez changer la taille de la fenêtre de projection (les quatres premiers éléments de la liste) : dans certains cas extrêmes les échelles ou les légendes peuvent sortir du parallélépipède, ou vous pouvez vouloir ne tracer que les objets, sans les axes, et vous voulez les couper en rétrécissant la fenêtre de projection. Vous pouvez éventuellement vouloir régler la fenêtre de projection à un rectangle non carré, auquel cas il faudra redimensionner également le plot frame en conséquence.

En modifiant la fenêtre de projection, ou les paramètres "near" et "far" de la projection (les 5ème et 6ème éléments de la liste), vous pouvez obtenir des résultats particuliers simulant une section d'une surface, et permettant de voir l'intérieur d'une surface fermée.

light position
Modifier light position permet divers effets. Lorsque la source lumineuse est définie plus près (donc avec une grande valeur pour le 4ème élément de la liste), des effets de réflexion de la lumière peuvent être obtenus.
limits
Vous pouvez définir la propriété limits correspondant aux limites du parallélépipède de la view3D avec une liste de 6 éléments. Chaque élément doit être un nombre ou le texte "auto". Par défaut limits est mis à {"auto", "auto", "auto", "auto", "auto", "auto"}. Vous pouvez obtenir les valeurs utilisées via la propriété current limits.
Options d'affichage de la view3D
drawaxes
Les view3D dessinent ou non les arêtes du cube, les axes et les légendes, selon la valeur booléenne de la propriété drawaxes (valeur par défaut : true).
xlabel, ylabel
Les légendes des axes peuvent être définis par les propriétés xlabel et/ou ylabel. Le texte correspondant peut comporter un certain nombre de symboles permettant d'écrire des expressions mathématiques. La table de ces caractères spéciaux (par exemple \infty pour ∞)) est donnée dans la page Les symboles supportés par DrawString.
xlabel offset
Pour ajuster la position des légendes par rapport aux axes, il suffit de modifier la propriété xlabel offset (40 pixels par défaut). Les deux légendes en x et en y ont le même offset.
resolution
Les view3D ne sont pas des graphiques vectoriels. Avant de sauvegarder un document qui sera amené à être imprimé, vous voudrez peut-être augmenter la résolution des graphiques. Par défaut la propriété resolution est définie à 72 dpi (points par inch), ce qui correspond à une résolution adaptée à l'affichage sur un écran. Pour obtenir un document de haute résolution, augmenter la valeur de cette propriété par exemple à 300 avant d'enregistrer la fenêtre dans un pdf.
back pdf, front pdf
Les propriétés back pdf et front pdf permettent d'afficher, soit en image de fond (back pdf) soit au-dessus du graphique (front pdf), une image PDF : soit en provenance d'un document PDF, soit obtenu par script. Les instructions à ce sujet sont les mêmes que pour la picture view
convert coordinates
Pour convertir des coordonnées (x,y,z) données en unités utilisateurs (celles des axes) en coordonnées en pixels, vous pouvez utiliser convert coordinates p in vp est le triplet et v une référence à la view3D. Les coordonnées retournées par convert coordinates sont relatives à l'origine de la frame de la view3D.
Le menu contextuel
Vous pouvez dérouler le menu contextuel d'un view3D en cliquant dessus tout en appuyant sur la touche ctrl.
Dans ce menu, vous pouvez activer ou désactiver le déplacement de la surface à la souris (ce qui permet de faire tourner la surface par simple clic au lieu de ⌘-clic). Vous pouvez également choisir d'afficher les objets en fil de fer lorsque vous tournez la surface, ce qui peut rendre l'affichage moins lent. Par ailleurs, vous pouvez ouvrir la fenêtre de réglages depuis ce menu.

La fenêtre de réglages est une fenêtre de dialogue vous permettant d'éditer les propriétés des view3D et de leurs objets 3D.

English version
Copyright ©2008 Paris, Satimage