7.2 Graphes de scène

Les graphes de scène sont issus de l'architecture des boîtes à outils 3D du milieu des années 90 telles que Open Inventor [Wernecke1993,Silicon Graphics, Inc2005]. À l'époque où la programmation de scènes 3D demandait de solides notions en programmation avec des librairies graphiques de bas niveau, la solution des graphes de scène a permis la manipulation d'entités de plus haut niveau. Le principe est d'utiliser un graphe acyclique orienté pour organiser hiérarchiquement une scène 3D. Cette structure arborescente est manipulée par sa racine et chacun de ses nœuds est un élément de la scène à représenter. Naturellement, chaque nœud peut lui-même être un graphe de scène, ce qui entraîne une bonne organisation au niveau conceptuel, mais aussi sémantique en offrant plusieurs niveaux de granularité (voir figure 7.2).

Parmi les avantages et possibilités de cette architecture, nous pouvons noter:

  1. son adéquation avec les paradigmes de la programmation objet et une bonne structuration de la scène;
  2. l'optimisation et la simplification de la gestion de l'ordre d'affichage et du détourage («clipping»);
  3. la transmission et le partage aisés du contexte graphique (propriétés) entre nœuds parents et enfants.

Figure 7.2: Graphes de scènes. La figure (a) présente un graphe de scène ne représentant que les objets géométriques de la scène. Cette visualisation permet d'appréhender clairement l'organisation de la scène. La figure (b) est une représentation complète d'un graphe de scène, faisant apparaître les transformations et autres nœuds graphiques.
\begin{figure}\setcounter{subfigure}{0}
\begin{center}
\subfigure[Une organisat...
...plète.]{
\includegraphics[width=\textwidth]{scene}}
\end{center}
\end{figure}

Cette représentation structurée et ses avantages techniques qui ont permis de nettes améliorations des performances, ont vite poussé les graphes de scène au rang de standard des architectures de boîtes à outils ou de logiciels pour la 3D. Mais depuis peu, comme nous l'avons déjà évoqué plus haut, cette architecture a commencé à être adoptée dans les boîtes à outils 2D, spécialement dans celles dédiées à l'interaction avancée. Nous avons nous aussi choisi cette structure pour ses propriétés de réutilisation et ses avantages du point de vue graphique, mais aussi avec l'idée de fond d'y associer une gestion avancée des interactions.

Un graphe de scène, dans le modèle des graphes combinés, est formé d'un objet racine, le bureau ou desk, et de nœuds, les objets graphiques de l'interface (voir figure 7.3). Notre implémentation fournit différentes classes d'objets graphiques, la majorité d'entre eux pouvant être instanciés avec des formes diverses et arbitraires. Cette indépendance des objets vis à vis de leur forme permet plus d'expressivité dans la conception d'interfaces du fait que les objets ne sont pas limités à des formes rectangulaires ou ellipsoïdales. Leurs propriétés graphiques, telles que la couleur, les transformations géométriques ou l'opacité sont encapsulées par les objets et propagées aux nœuds fils par un mécanisme de contextes graphiques.

Figure 7.3: Un graphe de scène simple et l'interface correspondante.
\includegraphics[width=.85\textwidth]{scenegraph}

Les nœuds, ou objets graphiques, que nous proposons se décomposent en deux grandes classes:

  1. les objets graphiques atomiques, définissant plusieurs états ou propriétés: objets transparents, objets pliables, objets calques, etc.
  2. les objets graphiques composites, groupements d'objets atomiques (ou composites) dans un graphe de scène, encapsulant éventuellement un comportement prédéfini entre les objets atomiques.
Un exemple d'objet composite est la glissière de la figure 7.4: les deux objets atomiques (le panneau et la poignée) ont un comportement prédéfini, la poignée ne pouvant être déplacée que le long de la «glissière». Les «widgets» standard (boutons, glissières, fenêtres, etc.) peuvent être implémentés sous forme d'objets composites.
Les objets atomiques et composites de base que nous proposons sont extensibles en utilisant le mécanisme d'héritage, et nombre d'objets graphiques plus complexes peuvent être créés à partir des abstractions et interfaces fournies.

Figure 7.4: Un objet composite décrit par un graphe de scène d'objets atomiques.
\includegraphics[width=.65\textwidth]{slider}

Nous passerons dans cette partie les méthodes proposées pour créer un graphe de scène MAGGLITE; notons juste que, hormis la création de graphes de scène par programmation, nous proposons une méthode interactive basée sur le dessin dans la section 8.4.2, chapitre 8. Concentrons nous par contre sur les méthodes de description des interactions dans un graphe de scène. Dans les approches actuelles, l'interaction est décrite conjointement à la partie graphique par des nœuds spécifiques du graphe de scène, quand elle n'est pas tout simplement emmurée dans les nœuds graphiques eux-mêmes.

Les boîtes à outils Jazz et son évolution Piccolo développées au HCIL, par exemple, sont basées sur une structure très complète et avancée de graphes de scène [Bederson et al.2000,Bederson et al.2004]. Par contre, les interactions sont encapsulées au niveau des nœuds (objets graphiques) et basées sur l'architecture à évènements peu évolutive de la librairie Swing (voir figure 7.5(a)). Le principe est de créer des écouteurs qui peuvent alors être ajoutés au canevas de l'application (le conteneur principal du graphe de scène) ou directement à un nœud (pour la version .NET). De fait, même si cette boîte à outil innove sur les interfaces zoomables en offrant une grande latitude pour l'introduction de nouveaux composants graphiques, elle reste relativement fermée pour ce qui est des interactions avancées.

A contrario, la librairie graphique Java3D [Nadeau et al.1997,Sun Microsystems, Inc2004b] propose une classe spéciale de nœuds permettant de connecter des comportements (animations ou interactions) à des objets du graphe de scène. Cela permet de construire des graphes très complets et complexes, dont les sous-graphes peuvent fournir des comportements différents 7.5(b). Toutefois, ou plutôt encore une fois, bien que proposant une abstraction pour la gestion de périphériques d'entrée avancés, il est encore nécessaire de réaliser la liaison bas-niveau avec les périphériques non-standard (autres que souris et clavier) ainsi que les nœuds qui vont permettre les interactions avec le graphe de scène.

Figure 7.5: Graphes de scène et interactions. La figure (a) présente un graphe de scène de la boîte à outils Piccolo. Les interactions sont gérées par un mécanisme standard d'événements. Des écouteurs interprètent ses événements et sont connectés (statiquement) à des nœuds du graphe de scène. L'approche choisie pour Java3D (figure (b)) est de créer des nœuds spécifiques pour gérer les interaction et de les insérer aux branches voulues du graphe de scène.
\begin{figure}\setcounter{subfigure}{0}
\begin{center}
\subfigure[Interactions ...
....]{
\includegraphics[width=.7\textwidth]{java3dsg}}
\end{center}
\end{figure}

Outre l'aspect statique de ces approches, qui impose de «brancher» et donc de figer les interactions à la création du programme7.1, se pose aussi le problème de l'extensibilité. Malgré une granularité assez fine des composants permettant de définir les interactions, l'introduction d'interactions avancées, de périphériques nouveaux et leur réutilisation dans d'autres contextes reste laborieuse. Pour offrir plus de flexibilité et d'extensibilité, notre modèle de graphes combinés externalise la description des interactions avec les graphes d'interaction. Ainsi, les graphes de scène ne sont composés que de nœuds représentant des objets graphiques. Et de la même manière que la structure de graphe de scène sépare la partie graphique en composants graphiques primitifs, nous proposons d'utiliser des graphes d'interaction pour séparer la structure souvent complexe et monolithique des architectures événementielles.

stuf
2005-09-06