You are on page 1of 6

PLAN Graphes de scne

Une introduction Structures de donnes Graphes de scnes Fonctionnement Utilisations avances Implmentations

Programmes triviaux Structures de donnes


Le code graphique est cod en dur dans le programme

Programmes basiques (1/2)


Utilisation d'une liste d'objets

Programmes basiques (2/2)


Affichage
afficher (objet) {

Typedef struct { char type[20]; float position[3]; float couleur[3]; } objet;

Pour i=0 nb_objets

glTranslate(objet.pos[0],...); glColor(objet.coul[0],...);

' cube ' [-5.0, 0.0, 0.0] [1.0, 0.0, 0.0]

{ afficher(liste[i]); }

if (objet.type == cube) // dessiner un cube else if (objet.type == sphere) // dessiner une sphre }

Programmes Orients Objet (1/2)


L'objet sait comment s'afficher
class object { virtual afficher()=0; float position[3]; float couleur[3]; }; }; class cube: public objet { afficher(); setSize(float size); private: float size;

Programmes Orients Objet (2/2)

Pour i=0 nb_objets { afficher(liste[i]); }

afficher (objet) { glTranslate(objet.pos[0],...); glColor(objet.coul[0],...); objet.afficher(); }

Partage de proprits
Pb: la couleur apparat dans chaque objet, mme s'ils sont tous bleus Solution possible: grouper les objets

Liens entre objets (1/3)


Ex: Un systme solaire La Terre tourne autour du Soleil La Lune tourne autour de la Terre etc. Crer un champ dpend_de Ex: Terre dpend_du Soleil
class object { virtual afficher()=0; float position[3]; float couleur[3]; object * dpend_de;

liste de couleurs

};

Liens entre objets (2/3)


Ce lien peut concerner beaucoups de paramtres: - position - rotation - couleur - texture - etc.

Liens entre objets (3/3)

Dfinition Graphes de scnes


Similaire un arbre gnalogique
Graphe acyclique dirig Compos de noeuds et de relations parentenfant

Composants
Noeuds et connectivit

Utilit (1/3)
Hritage des proprits
Soleil Terre

Contenu des noeuds

Lune

Satellites

Utilit (2/3)
Reprsentation plus naturelle
(Notion de squelette)

Utilit (3/3)
Rutilisation d'objets
chassis chassis
trans 4 trans 1 trans 2 trans 3 trans 4

Animation

trans 1

trans 2

trans 3

roue

roue

roue

roue

roue

Rcapitulatif
Reprsentation plus naturelle Hritage des proprits Facilite l'animation ou la manipulation Partage d'objets communs

Fonctionnement

Construction du graphe (1/2)


Cration des objets gomtriques Cration des transformations Cration des paramtres (couleur, texture, etc.) Assemblage en graphe

Construction du graphe (2/3)


racine = new rotation(90, 1,0,0); trans1 = new translation(-2,0,0); trans2 = new translation(2,0,0); sphere1 = new sphere(5); sphere2 = new sphere(3); racine->addChild(trans1); racine->addChild(trans2); trans1->addChild(sphere1); trans2->addChild(sphere2);

R T1 T2

S1

S2

Affichage du graphe (1/2)


Parcourir le graphe en partant de la racine
engine->affiche(racine);

Affichage du graphe (2/2)


glRotate(90,10,0); glPushMatrix(); glTranslate(-2,0,0); sphere1.afficher(); glPopMatrix(); T1 T2 R

Afficher les objets un un

S1

S2

Affichage du graphe (2/2)


glRotate(90,10,0); glPushMatrix(); glTranslate(2,0,0); sphere2.afficher(); glPopMatrix(); T1 T2 R

Utilisations avances

S1

S2

Performances
Gnration (et mise jour) automatique de display lists. Bounding Box et culling

Autres
BB: Physique et dtection de collisions Distribution
Collaboration

Autres

Autres
BB: Physique et dtection de collisions Distribution
Collaboration Clusters
Slaves

Master

Implmentations Implmentation
Le faire soi-mme

Utiliser une librairie existante


OpenInventor OpenSG OpenSceneGraph Syzygy

Questions

You might also like