Graphes de scnes lexemple de Open SG Patrick

  • Slides: 123
Download presentation
Graphes de scènes à l‘exemple de Open. SG Patrick Reuter La. BRI – INRIA

Graphes de scènes à l‘exemple de Open. SG Patrick Reuter La. BRI – INRIA futurs Université Bordeaux I

Programme 1. ) Graphe de Scènes - Motivation - Exemples 2. ) Open. SG

Programme 1. ) Graphe de Scènes - Motivation - Exemples 2. ) Open. SG - Motivation - Introduction - Exemples 3. ) Format de Fichiers - 3 D scène (VRML) - 3 D maillages (OBJ) 2

1. ) Graphe de Scènes

1. ) Graphe de Scènes

Motivation Scene Graphs • Open. GL est très bas niveau - Immediate mode based

Motivation Scene Graphs • Open. GL est très bas niveau - Immediate mode based - Pas de concepts „objet“ à part display lists - Utilisateur a beaucoup de contrôle . . . et beaucoup de pièges à rentrer dedans Il faut connaitre le Hardware très bien 4

Motivation Graphes de Scène • Graphes de Scènes sont à un niveau supérieur -

Motivation Graphes de Scène • Graphes de Scènes sont à un niveau supérieur - Retained mode Établir la structure de données une fois Après l‘utiliser le plus souvent possible - Orienté Objet - Beaucoup d‘optimisation possible • „Graphes de Scènes pour Open. GL sont ce qui est STL pour C++“ • Exemple “Maison” 5

Graphe de Scène - structure Racine • Directed Lumière • Acyclic Groupe (Voiture) Groupe

Graphe de Scène - structure Racine • Directed Lumière • Acyclic Groupe (Voiture) Groupe (Roux) Transformations Roux - geo Group (Carosserie) • Heterogène • Structure logique dans les noeuds intérieurs • Geometrie (ou autres primitives) dans les feuilles, p. ex. polygonal meshes 6

Le graphe de scène dans l’architecture p. ex. VRJuggler, Co. Vise, Virtual Design 2,

Le graphe de scène dans l’architecture p. ex. VRJuggler, Co. Vise, Virtual Design 2, Avalon, DBview, CATIA, Open. Mask, World. Tool. Kit (WTK), … p. ex. Performer, Open. SG, Open. Inventor, Java 3 D, Open. Scene. Graph, Y, … Système Réalité Virtuelle, Application CAO (CAD), . . . Graphe de Scène Open. GL Système (UNIX, Windows) 7

Graphes de Scènes - Exemple 8

Graphes de Scènes - Exemple 8

Graphes de Scènes - Exemple 9

Graphes de Scènes - Exemple 9

Graphes de Scènes - Exemple 10

Graphes de Scènes - Exemple 10

Graphes de Scènes - Exemple Comment c’est fait en VRML 97 ? 11

Graphes de Scènes - Exemple Comment c’est fait en VRML 97 ? 11

 geometry indexed. Face. Set { coord Coordinate { Graphes de Scènes - Exemple

geometry indexed. Face. Set { coord Coordinate { Graphes de Scènes - Exemple point [ 0. 3 0. 65 0. 4, 0. 2 0. 3 0. 4, … ] } # Coordinate coord. Index [0, 1, 2, -1, 3, 4, 5, -1, …] } # ifs } # Shape #VRML V 2. 0 utf 8 Transform { DEF avion Transform { position x y z position x y z orientation nx, ny, nz orientation x y z angle children [ Transform { … } Shape { Transform { …. } material Material { ] diffuse. Color r g b } } # Transform … } # avion 12

Graphes de Scènes: Actions Bonne structure, mais pourquoi? • Render. Action: rendu de la

Graphes de Scènes: Actions Bonne structure, mais pourquoi? • Render. Action: rendu de la scène • Intersect. Action: intersection (p. ex. pour selection ou collection) • Facilite les interactions (Rendu d’une partie de la scène, …) 13

Graphes de Scènes: Exigences Performance Facile à utiliser - multi-thread (parallel processing) - state-sorting

Graphes de Scènes: Exigences Performance Facile à utiliser - multi-thread (parallel processing) - state-sorting - proche du hardware -… Généralité - cross-plateforme (Win 32, Linux, IRIX, …) …) - multi-pipe (CAVE, Powerwalls, Reality Centers, - extensible -… 14

Graphes de Scènes: Exigences – multi-threading Input Physical Simulation Collision Detection Visibility Visual Rendering

Graphes de Scènes: Exigences – multi-threading Input Physical Simulation Collision Detection Visibility Visual Rendering Haptic Rendering • Graphe de Scène stocke les données de la scène • Tasks multiples indépendants Peuvent marcher en parallel Peuvent être asynchrone 15

Graphes de Scènes: Exigences – multi-pipe • au La. BRI: Hemicyclia (SGI Reality Center)

Graphes de Scènes: Exigences – multi-pipe • au La. BRI: Hemicyclia (SGI Reality Center) 16

Systèmes existantes Open Inventor Performer Y Cosmo 3 d Optimizer Direct. Model Open. GL++

Systèmes existantes Open Inventor Performer Y Cosmo 3 d Optimizer Direct. Model Open. GL++ Java 3 d Fahrenheit Open. SG 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 17

Open. Inventor - Graphes de scènes existants • Open. Inventor (http: //www. sgi. com/Technology/Inventor)

Open. Inventor - Graphes de scènes existants • Open. Inventor (http: //www. sgi. com/Technology/Inventor) et (www. tgs. com) et (www. coin 3 d. com) • le plus vieux graphe de scène mais toujours utilisé + beaucoup d’outils (Viewer, …) + simple à utiliser - mauvaise performance - pas de support multi-thread - pas de support multi-pipe (à part une extension de la version de TGS) - Open. Source (version SGI, Coin 3 D), pas Open. Source (version TGS) - disponibilité: seulement Linux/IRIX (version SGI), + Win 32, HP, SUN (version TGS) 18

Performer - Graphes de scènes existants • SGI Performer (http: //www. sgi. com/software/performer) •

Performer - Graphes de scènes existants • SGI Performer (http: //www. sgi. com/software/performer) • très vieux + performance (state-sorting, APP-CULL-DRAW) + support multi-pipe + support multi-thread (mais limité) - difficile - pas Open. Source - pas extensible aux nouvelles architectures - disponibilité: seulement Linux/IRIX, Windows à partir de la Version 3. 0 19

Java 3 D - Graphes de scènes existants • Java 3 D (www. java

Java 3 D - Graphes de scènes existants • Java 3 D (www. java 3 d. org) • récent + support pour systèmes de procjections + très simple - pas de vrai support multi-pipe - pas de support multi-thread - pas extensible pour des nouvelles extensions graphiques - mauvaise performance 20

Graphes de Scènes - Visions • Echec: Fahrenheit (Coopération SGI – Microsoft) • Utilisateur

Graphes de Scènes - Visions • Echec: Fahrenheit (Coopération SGI – Microsoft) • Utilisateur veulent pas être dépendant de l’industrie • Utilisateur veulent pas être dépendant d’un système d’exploitation • Besoin d’un standard Solution: Open. SG ? 21

Open. SG Open. GL System (UNIX, Windows) 22

Open. SG Open. GL System (UNIX, Windows) 22

Buts de Open. SG • cross-plateforme: Irix/Unix/Linux + Windows • haute performance (hardware, state-sorting)

Buts de Open. SG • cross-plateforme: Irix/Unix/Linux + Windows • haute performance (hardware, state-sorting) • multi-threading • multi-pipe heterogène (CAVE, Powerwalls, . . . ) • surfaces free-form • extensible • disponible: Open Source • buts non – lucratifs 23

! Buts de Open. SG • ce n’est pas un système VR • outils

! Buts de Open. SG • ce n’est pas un système VR • outils pour device handling, interaction etc. sont disponible dans: Maverick, Cave. Lib, VRJuggler, VRPN • unique API graphique - Open. GL est disponible partout et est une bonne alternative 24

Developpement • Developpé comme Open Source - Sources diponible de www. opensg. org and

Developpement • Developpé comme Open Source - Sources diponible de www. opensg. org and www. sourceforge. net/projects/opensg - Communication via Source. Forge Mailing lists ou IRC (Galaxynet: #Open. SG) - Contributions bienvenues • Platforms - Now: Irix, Linux, Windows (VS. NET, ICC) - Experimentation: Mac. OS X, HP-UX - A venir: SUN Solaris 25

O. I. N. O. S. • Open. SG n’est pas Open Scene Graph! •

O. I. N. O. S. • Open. SG n’est pas Open Scene Graph! • Deux projets totalement indépendants • Début en meme temps 26

Membres du Forum Open. SG ABB Research Center AUDI AG BMW AG Daimler Chrysler

Membres du Forum Open. SG ABB Research Center AUDI AG BMW AG Daimler Chrysler Aerospace AG EDS PLM Solutions Fraunhofer IAO Fraunhofer IGD Fraunhofer IMK INI-Graphics. Net Fondation Instituto Superior Tecnico Max-Planck-Institut für Informatik Silicon Graphics Gmb. H Volkswagen AG Siemens AG, ZT vrcom Gmb. H TU Darmstadt TU München 27

Open. SG Large Scene Support High Level Primitives High Level Shading Open. SG Bas

Open. SG Large Scene Support High Level Primitives High Level Shading Open. SG Bas niveaul • Partners: IGD, TU Darmstadt, TU Braunschweig, U Bonn, U Stuttgart, U Tübingen, MPI Saarbrücken, RWTH Aachen, ZGDV, Open. SG Forum • 4 domaines: Low-Level, Large Scene Support, High-Level Primitives, High-Level Shading Open. GL • 2/01 à 12/03 System (UNIX, Windows) • www. opensg. org/Open. SGPLUS 28

Status & Roadmap • 1. 1: Developer Release, June 2002 - Stereo, Multipipe -

Status & Roadmap • 1. 1: Developer Release, June 2002 - Stereo, Multipipe - Premiers résultats Open. SG PLUS: Cluster • 1. 2: Stable version, October 2002 (disponible sur www) - Stable 1. 1 - Documentation - Exemples etc. • 1. 3: Features & Performance, April 2003 (disponible sur CVS) - Multi-Pass / Multi-Stage Support - NURBS - Volumes 29

2. ) Open. SG Un Graphe de Scène Open. Source Une librairie – à

2. ) Open. SG Un Graphe de Scène Open. Source Une librairie – à utiliser comme n’importe quelle autre librairie

Structure de la librairie • Base Lib (Source/Base) : (lib. OSGBase. so) - Basic

Structure de la librairie • Base Lib (Source/Base) : (lib. OSGBase. so) - Basic math, Field, Réseaux, abstraction OS, Volumes • System Lib (Source/System) : (lib. OSGSystem. so) - Le graphe de scène Noeuds / Loader / Cluster / Material / Window /. . . Window System Libs • Window System Libs (Source/Window. System): (lib. OSGWindow. GLUT. so, lib. OSGWindow. QT. so, lib. OSGWindow. X. so, . . . ) - Un par Windowsystem System. Lib Base. Lib Open. GL C++ Libs (QT, jpeg) OS 31

Base. Lib • Namespace : OSG - OSG_USING_NAMESPACE or OSG: : - OSG_BEGIN_NAMESPACE, OSG_END_NAMESPACE

Base. Lib • Namespace : OSG - OSG_USING_NAMESPACE or OSG: : - OSG_BEGIN_NAMESPACE, OSG_END_NAMESPACE • Types de Base (OSGBase. Types. h) (pour assurer cross-plateforme) - [U]Int{8|16|32|64} - Real{32|64} - bool - [U]Char 8 32

Base. Lib • Fonctions de Maths - Real 32 and Real 64 variants (template)

Base. Lib • Fonctions de Maths - Real 32 and Real 64 variants (template) osgsin, osgcos, osgabs, osgpow, osgfloor etc. - deg 2 rad & rad 2 deg Normalement en radiant à part explicitement determiné: - Quaternion: : set. Value. As. Axis. Rad - Quaternion: : get. Value. As. Axis. Deg 33

Base. Lib • Nécessite Startup / Termination calls (OSGBase. Functions. h) - osg. Init(Int

Base. Lib • Nécessite Startup / Termination calls (OSGBase. Functions. h) - osg. Init(Int 32 argc, Char 8 **argv); - osg. Exit(void); void main(Int 32 argc, Char 8 **argv) { osg. Init(argc, argv); . . osg. Exit(); } 34

Base. Lib: Vectors / Points • Variants typés - Vec{2|3|4}f, Vec 2 s, Vec

Base. Lib: Vectors / Points • Variants typés - Vec{2|3|4}f, Vec 2 s, Vec 4 ub, Pnt{2|3|4}{f|d}, Pnt 2 s • Interface d’accès (get. Value, set. Value) [ ] • Difference Point / Vector - Points sont des position en espace • Opérations : scale, negate, test, add vector, sub point, … - Vectors sonts des directions in space (derivé de points) • Opérations : dot, cross, +, -, … X v = p – p p = p + v v = v – v p = p + p 35

Base. Lib: Couleurs • variants typé, comme point/vector - Color{3|4}{f|ub} • RGB[A] / HSV

Base. Lib: Couleurs • variants typé, comme point/vector - Color{3|4}{f|ub} • RGB[A] / HSV set/get méthodes • Interne stocké comme RGB[A] • conversions RGB[A] / HSV 36

Base. Lib: Quaternions • répresentation d‘orientation • set/get de/à différents types de valeurs •

Base. Lib: Quaternions • répresentation d‘orientation • set/get de/à différents types de valeurs • fonctions standards: normalize, slerp, mult. Vec etc. • rien de spécial 37

Base. Lib: Matrices Matrix • Stockage comme dans Open. GL: column major! M[0] M[0]

Base. Lib: Matrices Matrix • Stockage comme dans Open. GL: column major! M[0] M[0] M[1] M[2] M[3] Vec 4 f Mémoire M[0] M[1] M[2] M[3] 38

Base. Lib: Matrices Matrix( • [ ] operators • Constructeurs à partir de vecteur

Base. Lib: Matrices Matrix( • [ ] operators • Constructeurs à partir de vecteur • fonctions à base de vecteur Vec 3 f , Sont également column-major! Vec 3 f Matrix M[0] M[1] M[2] M[3] Vec 4 f ); 39

Base. Lib: Matrices • Attention: Real 32 constructeur • et set. Value(m 00, m

Base. Lib: Matrices • Attention: Real 32 constructeur • et set. Value(m 00, m 10, m 20, m 30, Matrix( m 00 , m 10 , m 20 , m 30 , m 01, m 11, m 21, m 31, m 01 , m 11 , m 21 , m 31 , m 02, m 12, m 22, m 32, m 02 , m 12 , m 22 , m 32 , m 03, m 13, m 23, m 33); Row major! Sinon, utiliser set. Value. Transposed! set. Value( m 03 , m 13 , m 23 , m 33 ); m 00 , m 10 , m 20 , m 30 , m 01 , m 11 , m 21 , m 31 , M[0] M[1] M[2] M[3] m 02 , m 12 , m 22 , m 32 , m 03 , m 13 , m 23 , m 33 ); 40

Base. Lib: Manipulation des matrices • m 1. mult(m 2) == m 1 *

Base. Lib: Manipulation des matrices • m 1. mult(m 2) == m 1 * m 2; | m 1. mult. Left(m 2) == m 2 * m 1; • set. Translate / set. Rotate / set. Scale - Affecte seulement la partie specifié • set. Transform() affecte la matrice entière - void Matrix: : set. Transform(Vec 3 f trans, Quat rot, Vec 3 f scale); • inverse / transpose 41

Base. Lib: Volumes • Volumes englobantes pour le Culling • Types : - Box.

Base. Lib: Volumes • Volumes englobantes pour le Culling • Types : - Box. Volume - Sphere. Volume - Cylinder. Volume - Frustum. Volume - Dynamic. Volume • Flags pour des états spécial: - Valid (invalide: n‘est pas mis à jour) - Empty - Infinite (toujours visible) - Static (ne change pas) 42

Base. Lib: Volumes • Manipulation : - clear - extend. By (Point or Volume)

Base. Lib: Volumes • Manipulation : - clear - extend. By (Point or Volume) - transform • Accès : - get. Center - get. Bounds(min, max) • Test : - intersect(Point/Line/Volume) 43

Base. Lib: Quoi d‘autres ? • Line / Plane • Date / Time •

Base. Lib: Quoi d‘autres ? • Line / Plane • Date / Time • Primitives multi-threading • Réseaux (Socket, Connection, Select) • . . . 44

System. Lib Window. System. Libs System. Lib Base. Lib Open. GL C++ Libs (QT,

System. Lib Window. System. Libs System. Lib Base. Lib Open. GL C++ Libs (QT, tif, jpeg) OS 45

Fields • définie à partir de Base. Type • membres de données de Field.

Fields • définie à partir de Base. Type • membres de données de Field. Container (Nodes, . . . ) - Donne information sur eux-mêmes Cardinality Size Name Stored type - Conversion de et à string / binaire - Cardinalité: Single or Multi 46

Single Fields • unique valeur • Interface - get. Value(), set. Value(value), set. Value(field)

Single Fields • unique valeur • Interface - get. Value(), set. Value(value), set. Value(field) • Naming Convention - SF<Type. Name> - Exemple : SFInt 32 SFNode. Ptr 47

Multi. Fields • arrays 1 D • Similaire à STL vectors - Iterators, begin(),

Multi. Fields • arrays 1 D • Similaire à STL vectors - Iterators, begin(), end(), insert(), erase(), push_back(), [ ] etc. • Additionallement : - add. Value(val) - get. Value(UInt 32 index), set. Value(val, index) - vector<type>& get. Values() 48

Field. Containers • Reflective • Principaux types de Field. Container - Node - fournit

Field. Containers • Reflective • Principaux types de Field. Container - Node - fournit information sur lui-même - Node. Cores - fournit accès generique (auto Chargeur / GUI) • partageable - State, Materials • support Multi-thread - Windows • support Cluster • Extensible • Configurable 49

System. Lib: Structure du Graphe de Scène Proposition 1 (Open. Inventor): Voiture + Chaque

System. Lib: Structure du Graphe de Scène Proposition 1 (Open. Inventor): Voiture + Chaque nœud à un parent - redondance de données Moteur Roues Carosserie Transform Roue 1 Transform Roue 2 Transform Roue 3 Transform Roue 4 Géometrie Roue 50

System. Lib: Structure du Graphe de Scène Voiture Proposition 2 (Open. Inventor): + Pas

System. Lib: Structure du Graphe de Scène Voiture Proposition 2 (Open. Inventor): + Pas de redondance de données - parents multiples Moteur Transform Rou 1 Roux Transform Rou 2 Carosserie Transform Rou 3 Transform Rou 4 Géometrie Rou 51

System. Lib: Structure du Graphe de Scène Proposition 3 (Open. SG): Voiture + Chaque

System. Lib: Structure du Graphe de Scène Proposition 3 (Open. SG): Voiture + Chaque nœud à un parent + pas de redondance de donées Moteur Roux Carosserie Transform Rou 1 Transform Rou 2 Transform Rou 3 Transform Rou 4 Géometrie Rou 52

System. Lib: Nodes „A node is a node“ • pas de parents multiple -

System. Lib: Nodes „A node is a node“ • pas de parents multiple - pointers / names can't be used to identify nodes - Pas de stockage de données dépendant de la position possible (p. ex. Matrice accumulée) Solution: - „lean backbone“ – pour la structure (type Node) - „cores“ reutilisable (type Node. Core) definie le comportement stocke les données partagé 53

System. Lib: Node Contents • Node: - Volume : volume englobante (type: SFDynamic. Volume)

System. Lib: Node Contents • Node: - Volume : volume englobante (type: SFDynamic. Volume) - Parent (type: SFNode. Ptr) : le parent du noeud - Children : les enfants du noeud (type: MFNode. Ptr) - Core (type: SFNode. Core. Ptr) : Pointer sur le Core - Attachment. Map : Information supplémentaire (type: SFAttachment. Map) - Méthode: get. To. World() 54

System. Lib: Node Contents • MFNode. Ptr _children; - UInt 32 get. NChildren( void

System. Lib: Node Contents • MFNode. Ptr _children; - UInt 32 get. NChildren( void ) const; - void add. Child (const Node. Ptr &child. P); - void insert. Child ( - void replace. Child. By( - Int 32 find. Child (const Node. Ptr &child. P ) const; - void sub. Child (const Node. Ptr &child. P ); - void sub. Child ( UInt 32 child. Index); - Node. Ptr get. Child ( UInt 32 child. Index ); UInt 32 child. Index, const Node. Ptr &child. P ); UInt 32 index, ); const Node. Ptr &child. P, Node. Ptr &new. Child. P); 55

System. Lib: Open. SG Node. Cores Node Core Env Impostor Group Mesh Drawable Super

System. Lib: Open. SG Node. Cores Node Core Env Impostor Group Mesh Drawable Super Surface Billboard Surface Particles Point Transform Light Switch Text Directional Dist. LOD Geom Spot Transform Set Slices Geometry Comp. Transform Volume Prog. Mesh Bitmap Texture 56

System. Lib: Node. Cores - Groups • Group • Transform / Component. Transform •

System. Lib: Node. Cores - Groups • Group • Transform / Component. Transform • Switch • Billboard • Distance. LOD • Lights 57

System. Lib: Group Node. Core • traverse tous les enfants • collectionne les données

System. Lib: Group Node. Core • traverse tous les enfants • collectionne les données de tous les enfants 58

System. Lib: Transform / Component. Transform Node. Core (hérite de Group) Rou Rotation de

System. Lib: Transform / Component. Transform Node. Core (hérite de Group) Rou Rotation de direction Rotation de mouvement Géometrie • Les transformations s‘accumule en montant l‘arbre • Transform: - simple transformation matrice (SFMatrix matrix) • Component. Transform: - Derivé de Transform - (style VRML) 59

System. Lib: Node. Cores – Switch (hérite de Group) • Traverse un, aucun, ou

System. Lib: Node. Cores – Switch (hérite de Group) • Traverse un, aucun, ou tous les enfants • Controlé par un champs SFInt 32 choice - choice = -1: aucun - choice = -2: tous - 0 <= choice < nchildren: enfant no. choice 60

System. Lib: Node. Cores – Billboard (hérite de Group) • Transformation qui pointe toujours

System. Lib: Node. Cores – Billboard (hérite de Group) • Transformation qui pointe toujours vers la camera (système de coordonnés local axe Z vers l’observateur) Quand l’observateur bouge à droite …. le Billboard s’oriente automatiquement vers l’observateur 61

System. Lib: Node. Cores – Distance. LOD (hérite de Group) • Distance. LOD choisie

System. Lib: Node. Cores – Distance. LOD (hérite de Group) • Distance. LOD choisie l’enfant en fonction de la distance de l’observateur et le Field SFPnt 3 f center - LOD discrets, transitions entre les LOD stocké dans MFReal 32 range field - Utilise l’enfant dans le range approprié Range[0] rien Range[1] Enfant 0 Range[2] Enfant 1 Range[3] Range[4] Enfant 2 Enfant 3 rien 62

System. Lib: Node. Cores - Lights • Lumières ont besoin de deux endroits dans

System. Lib: Node. Cores - Lights • Lumières ont besoin de deux endroits dans le Graphe de Scène: - Un pour déterminer quoi est éclairé Racine Definie par la position dans l‘arbre, tous les enfants sont éclairé Lumière Route Voiture Montagnes - Un deuxième pour définir sa position/orientation Beacon Definie par un autre noeud, appelé beacon • Fields: Roux Carosserie - Activation: SFBool on - Couleurs: SFColor 3 f ambient, diffuse, specular - Beacon: SFNode. Ptr beacon - Attenuation: SFReal 32 constant. Attenuation, linear. Attenuation, quadratic. Attenuation 63

System. Lib: Node. Cores – Directional. Light (hérite de Light) • Source de lumière

System. Lib: Node. Cores – Directional. Light (hérite de Light) • Source de lumière infiniment distant - Rayon de lumière parallele • Fields: - SFVec 3 f direction 64

System. Lib: Node. Cores – Point. Light (hérite de Light) • Source de lumière

System. Lib: Node. Cores – Point. Light (hérite de Light) • Source de lumière localisée - Differentes angles pour un surface plane • Fields: - SFPnt 3 f position 65

System. Lib: Node. Cores – Spot. Light (hérite de Light) • Lumière emis dans

System. Lib: Node. Cores – Spot. Light (hérite de Light) • Lumière emis dans un angle spécifié - Plus faible en s‘éloignant de la direction - S‘arrête à un angle determinéFields: - SFPnt 3 f position - SFVec 3 f direction - SFReal 32 spot. Exponent - SFReal 32 spot. Cut. Off 66

System. Lib: Node. Cores - Drawables • Geometry • Particles • Slices (dans la

System. Lib: Node. Cores - Drawables • Geometry • Particles • Slices (dans la version 1. 3, Avril 2003) 67

System. Lib – Node. Cores: Drawables - Geometry • orienté Open. GL • support

System. Lib – Node. Cores: Drawables - Geometry • orienté Open. GL • support de tous les primitives Open. GL • données directes et indexé • plusieurs types de primitive possible par noeud • un matérial (material field) • Iterateurs pour accès facile: - Triangle. Iterator - Face. Iterator - Primitive. Iterator 68

System. Lib – Node. Cores: Drawables - Geometry Data • Données stockés dans des

System. Lib – Node. Cores: Drawables - Geometry Data • Données stockés dans des arrays séparés - Positions, Normals, Colors, Tex. Coords 1, . . . - Types: gl. Begin() types de primitives (GL_POINT, GL_LINES, GL_TRIANGLE_STRIP, GL_POLYGON etc. ) class: Geo. PTypes. UI 8 - Longeurs: le nombre de vertices du primitive (= même nombre d‘entrée comme Geo. PTypes. UI 8) class: Geo. PLengths. UI 32 - Indexations pour usage multiple de données class: Geo. Indices. UI 32 69

System. Lib – Node. Cores: Drawables - Geometry Data (nonindexed) Types Lengths Tri Poly

System. Lib – Node. Cores: Drawables - Geometry Data (nonindexed) Types Lengths Tri Poly Strip Line Tri Points Tri 3 3 4 6 3 3 5 3 Positions Normals Colors. . . 70

System. Lib – Node. Cores: Drawables - Geometry Data (indexed) Types Lengths Index 0

System. Lib – Node. Cores: Drawables - Geometry Data (indexed) Types Lengths Index 0 Tri Poly Strip Line Tri Points Tri 3 3 4 6 3 3 5 3 1 3 3 5 4 8 6 9 . . Positions Normals Colors. . . Dans la troisième partie on revient sur ça (format de fichiers OBJ, …) 71

System. Lib – Node. Cores: Drawables - Geometry Tools • Simple Géometrie (OSGSimple. Geometry.

System. Lib – Node. Cores: Drawables - Geometry Tools • Simple Géometrie (OSGSimple. Geometry. h): - Nodes: make. Plane(), make. Box(), make. Cone(), make. Cylinder(), make. Torus(), make. Sphere(), make. Conical. Frustum() - Node. Cores: même chose + Geo (ex. make. Box. Geo()) • Fonctions Géometries (OSGGeo. Functions. h) - void calc. Vertex. Normals(Geometry. Ptr geo); - void calc. Face. Normals(Geometry. Ptr geo); - void create. Optimized. Primitives(Geometry. Ptr geo); Crée des strips et fans de triangles à partir d‘un maillage 72

System. Lib - Geo. Property Un Field. Container pour avoir un array unique 3

System. Lib - Geo. Property Un Field. Container pour avoir un array unique 3 f 3 f 3 f • Flexibilité et typage - noms typifié, e. g. Geo. Positions 3 f, Geo. Colors 4 ub • Permet de partager les données entre les géometries 3 s 4 ub 2 f • Accès générique - p. ex. Chaque position comprend: add. Value(Pnt 3 f &val); ainsi que Pnt 3 f get. Value(UInt 32 index); 73

Particles • Rendu de la géométrie active - Points, Lignes, Quadrilatérales, . . .

Particles • Rendu de la géométrie active - Points, Lignes, Quadrilatérales, . . . • Données Positions, sec. Positions (Geo. Positions. Ptr) Normals (Geo. Normals. Ptr), Colors (Geo. Colors. Ptr) - sizes (MFVec 3 f) - draw. Order (UInt 32): Any, Back. To. Front, Front. To. Back 74

System. Lib – Node. Cores: Drawables - Geometry – Slices (à partir de 1.

System. Lib – Node. Cores: Drawables - Geometry – Slices (à partir de 1. 3) • Très simple Node. Core pour le Rendu volumique • Rendu des coupes aligné observateur - Fields: SFMaterial. Ptr material , SFUInt 32 number. Of. Slices, SFVec 3 fsize • A suivre dans Open. SG Plus 75

System. Lib – Materials • comme les états Open. GL - Exceptions: transformation, lights

System. Lib – Materials • comme les états Open. GL - Exceptions: transformation, lights • Contrôleur for the Rendering - Drawable Node. Cores appellent leur material à rendre eux-mêmes - Peut contrôler Multipass Rendering etc. 76

System. Lib: Simple. Material (hérite de Material) • Simple standard Open. GL Material •

System. Lib: Simple. Material (hérite de Material) • Simple standard Open. GL Material • Couleurs (SFColor 3 f): ambient, diffuse, specular, emission • Shininess (SFReal 32) • Transparency (SFReal 32) : automatique „blending“ et sorting • Lit (SFBool): éclairé ou pas • Color. Material (SFUint 32) - Definie l‘interaction entre les couleurs de la géométrie et de l‘éclairage - Par défaut: GL_DIFFUSE 77

Lighting Parameters 78

Lighting Parameters 78

System. Lib: Simple. Textured. Material (hérite de Material) • Même que Simple. Material, mais

System. Lib: Simple. Textured. Material (hérite de Material) • Même que Simple. Material, mais en plus: - Image (SFImage. P): l‘image de texture - min. Filter & mag. Filter (SFUInt 32): filtrage Utilise des paramètres de Open. GL (p. ex. gl. Tex. Parameter) - env. Mode (SFUInt 32): environnement de texture. Comment combiner lumière et texture, par defautdefault: GL_REPLACE, alternatives: GL_MODULATE, GL_DECAL, voir détails dans Open. GL - env. Map (SFBool): si la texture doit être utiliser comme Environment Map 79

System. Lib: Image • Traite plusieurs formats différents: (L, LA, RGBA, . . .

System. Lib: Image • Traite plusieurs formats différents: (L, LA, RGBA, . . . ), Images 3 D, mipmaps and multi-images - img->read(Char 8 *name); // ouvre le fichier • Charge de formats: PPM, TIFF, JPG, RGB, PNG, enregistre: PPM, TIFF, JPG, RGB • (N‘est pas thread-safe encore) 80

System. Lib: Environment Maps • Used to simulate reflections 81

System. Lib: Environment Maps • Used to simulate reflections 81

System. Lib: Format de Fichiers supporté: • Formats: - VRML 97 (à voir dans

System. Lib: Format de Fichiers supporté: • Formats: - VRML 97 (à voir dans la partie 3) - OFF - Alias. Wavefront OBJ (à voir dans la partie 3) - RAW - OSG (format propriétaire) - BIN • Chargeur générique: (OSGScene. File. Handler. h) Node. Ptr root = Scene. File. Handler: : the(). read(file. Name); 82

System. Lib: Tree Traversals: Actions • Types: - Drawing: Draw. Action - Rendering: Render.

System. Lib: Tree Traversals: Actions • Types: - Drawing: Draw. Action - Rendering: Render. Action - Picking: Intersect. Action • Creation - act = xxx. Action: : create() • Traversal: - act->apply( root ); 83

System. Lib: Draw. Action (hérite de Action) • Appelle directement les commandes Open. GL

System. Lib: Draw. Action (hérite de Action) • Appelle directement les commandes Open. GL • Passé a la fenêtre • Maintenant: remplacé par Render. Action 84

System. Lib: Render. Action (hérite de Action) • Construit un Draw. Tree en parcourant

System. Lib: Render. Action (hérite de Action) • Construit un Draw. Tree en parcourant le graph et fait le rendu de ce même - Out-of-order et multi-stage / multi-pass support pour le rendu - Nouvelle version dans 1. 3 • Traite le State Sorting, transparence inclus 85

System. Lib: Intersect. Action (hérite de Action) • Intersection de la scène avec un

System. Lib: Intersect. Action (hérite de Action) • Intersection de la scène avec un rayon • Utilise une „Line“ pour définir la rayon - act->set. Line( l ); • Retourne - Object frappé - Triangle frappé - Point frappé 86

System. Lib: Simple Traversals • Souvent définir une nouvelle action n’est pas nécessaire: un

System. Lib: Simple Traversals • Souvent définir une nouvelle action n’est pas nécessaire: un simple appelle d’une fonction en entrant/quittant un noeud est suffisant • 4 fonctions traverse() - Commencer par une liste ou un noeud unique - Appelle une fonction en entrant (et sortant) • Voir tutorials 08 traverse 87

System. Lib - Windows • Comme Open. GL - Open. SG ne crée pas

System. Lib - Windows • Comme Open. GL - Open. SG ne crée pas de fenêtres • Garde l‘information pour le rendu - Contexte et objets Open. GL (p. ex. textures) - Viewports 88

System. Lib - Windows • Initialisation - Mettre les paramêtres de la fenêtre (display.

System. Lib - Windows • Initialisation - Mettre les paramêtres de la fenêtre (display. Function etc. ) - appeler init() • Necessite de savoir quand la taille de la fenêtre change - appeler win->resize() • Necessite de savoir début et fin d‘un „frame“ - appeler frame. Init() et frame. Exit() - Ou appeler window->render() 89

System. Libs – Windows - Viewports • Partage la fenêtre en plusieurs parties w

System. Libs – Windows - Viewports • Partage la fenêtre en plusieurs parties w pixel h/2 pixel - E. g. : left=0, right=100, bottom=-1, top=0. 5 crée un Viewport de largeur 100 pixel dans la moitié bas de la fenêtre • Stocke le paramêtres de rendu 100 pixel - Background, Camera, Root Node, Foregrounds 90

System. Lib – Windows - Background • Definie le fond avant l‘affichage de la

System. Lib – Windows - Background • Definie le fond avant l‘affichage de la „frame“ • Variantes: - Solid. Background Une couleur - Gradient. Background Un nombre de couleurs spécifiés à des postitions différents - Sky. Background Similaire de VRML 91

System. Lib – Windows - Camera Root Scene • Definie les paramêtres de la

System. Lib – Windows - Camera Root Scene • Definie les paramêtres de la projection ainsi que la position/orientation de l‘observateur Transform • Attributs générales: Beacon Camera - Position/orientation sont definie dans un noeud du graph (SFNode. Ptr beacon) Par défaut Y en haut, et regarde negative axe Z (comme Open. GL) - SFReal 32 near et far distance • Perspective. Camera: Vertical field of view (fov) Viewport • Matrix. Camera: pour spécifier les matrices 92

System. Lib – Windows - Camera Decorators Root Scene Transform • „Décore“ le Caméra

System. Lib – Windows - Camera Decorators Root Scene Transform • „Décore“ le Caméra - Tiled Displays Beacon - Stereo Camera - Projection Systems Deco. Left Port. Left Deco. Right Port. Right 93

System. Lib – Windows - Foreground • Appelé après le rendu du Viewport •

System. Lib – Windows - Foreground • Appelé après le rendu du Viewport • Plusieurs sont possible • Existant: - Logo. Foreground: déssine un logo - Simple. Statistics. Foreground -. . . • Version 1. 3 - Graphics. Statistics. Foreground 94

Applications • Besoin d‘une fenêtre Camera Decorator Viewports Background Foreground • Le fenêtre a

Applications • Besoin d‘une fenêtre Camera Decorator Viewports Background Foreground • Le fenêtre a besoin de Viewports qui ont besoin d‘un camera, background/foregrounds, et la racine du Graphe de Scène • La scène doit contenir un „beacon“ pour la Caméra, un ou plusieurs lumières, et la géometrie Window • Alternative: Utiliser Simple. Scene. Manager 95

System. Lib – Windows - Simple. Scene. Manager • Utilitaire classe pour des applications

System. Lib – Windows - Simple. Scene. Manager • Utilitaire classe pour des applications facile • Prend un Node. Ptr pour la racine du Graphe de Scène et un Window. Ptr et fait le reste - crée Camera, Viewport, Headlight - simule Trackball. Navigation • Doit être informé de - Resize - Mouse Move/Button Press/Release 96

System. Lib – Windows - Trackball Navigation • Classe pour faciliter les techniques d’interaction

System. Lib – Windows - Trackball Navigation • Classe pour faciliter les techniques d’interaction 3 D avec la souris - Left. Drag: rotation autour du centre - Middle. Drag: translation, - Right. Drag or Mouse. Wheel: zoom in/out - Left. Click: définie le centre 97

Window. System. Libs System. Lib Base. Lib Open. GL C++ Libs (QT, tif, jpeg)

Window. System. Libs System. Lib Base. Lib Open. GL C++ Libs (QT, tif, jpeg) OS 98

Window. System. Libs – Window. GLUT - Hello. Open. SG. cpp int main (int

Window. System. Libs – Window. GLUT - Hello. Open. SG. cpp int main (int argc, char **argv) { void display( void ) osg. Init(argc, argv); { mgr->redraw(); } glut. Init(&argc, argv); void reshape( int w, int h ) glut. Init. Display. Mode( GLUT_RGB | GLUT_DEPTH ); { mgr->resize( w, h ); int winid = glut. Create. Window("Open. SG"); glut. Post. Redisplay(); } glut. Reshape. Func(reshape); glut. Display. Func(display); void motion(int x, int y) glut. Mouse. Func(mouse); glut. Motion. Func(motion); { mgr->mouse. Move( x, y ); GLUTWindow. Ptr gwin= GLUTWindow: : create(); glut. Post. Redisplay(); } gwin->set. Win. ID(winid); gwin->init(); void mouse(int button, int state, int x, int y) Node. Ptr scene = make. Torus(. 5, 2, 16 ); { mgr = new Simple. Scene. Manager; if ( state ) mgr->mouse. Button. Release( button, x, y ); mgr->set. Window( gwin ); // premiere partie de mgr else mgr->set. Root( scene ); // deuxième partie de mgr->show. All(); // postionne la caméra mgr->mouse. Button. Press( button, x, y ); glut. Main. Loop(); glut. Post. Redisplay(); osg. Exit(); return 0; } } 99

Graphes Multi-threading: begin. Edit. CP, end. Edit. CP 1 er exemple: Node. Ptr scene

Graphes Multi-threading: begin. Edit. CP, end. Edit. CP 1 er exemple: Node. Ptr scene = make. Torus(. 5, 2, 16 ); // OSGSimple. Geometry Pourquoi? 2ème exemple: Node. Ptr scene = Node: : create(); begin. Edit. CP(scene, Node: : Core. Field. Mask | Node: : Children. Field. Mask); { scene->set. Core(group); scene->add. Child(…. ); } end. Edit. CP (scene, Node: : Core. Field. Mask | Node: : Children. Field. Mask); 100

Graphes de Scènes: Exigences – multi-threading Input Physical Simulation Collision Detection Visibility Visual Rendering

Graphes de Scènes: Exigences – multi-threading Input Physical Simulation Collision Detection Visibility Visual Rendering Haptic Rendering • Graphe de Scène stocke les données de la scène • Tasks multiples indépendants Peuvent marcher en parallel Peuvent être asynchrone 101

Multi-threading - Solution : Redondance (Data replication) • Chaque thread a besoin d‘une copie

Multi-threading - Solution : Redondance (Data replication) • Chaque thread a besoin d‘une copie séparée (Performer) Problème: consommation de mémoire • Qu‘est-ce qui est partagé? • Open. SG: Niveau de Field Str A Str B Field Data 102

Multi-threading Cluster Configuration • Client Application Ouvre une fenêtre Procès serveur générique Server Pratiquement

Multi-threading Cluster Configuration • Client Application Ouvre une fenêtre Procès serveur générique Server Pratiquement applicationindépendent • Distribution par multicast 103

Multi-threading : Impacte en programmation Open. SG • Les pointeurs Standard ne marche plus:

Multi-threading : Impacte en programmation Open. SG • Les pointeurs Standard ne marche plus: - Remplacer <Type>* par <Type>Ptr // Custom Pointer - Custom dynamic_cast<Type *> implementation • Données doivent être repliquées avant d‘être changées - Système nécessite de savoir quand les données changent: dans Open. SG, l‘utilisateur doit informer le système - begin. Edit. CP(FCPtr, fieldmask); // CP est le „Custom. Pointer“ - end. Edit. CP (FCPtr, fieldmask); Fieldmask: un bit par „field“ du Field. Container, par défaut: tous Exemple : begin. Edit. CP(node. P, Node: : Volume. Field. Mask | Node: : Children. Field. Mask); 104

Graphes de Scènes: Toujours et pour tout? Quand est-ce qu’il fait un sens d’utiliser

Graphes de Scènes: Toujours et pour tout? Quand est-ce qu’il fait un sens d’utiliser un Graphe de Scène? • Graphes de Scènes sont retained-mode • Approrié: - accès aux données de toute la scène permets optimization (comme Culling est State-Sorting) - pour des scènes très complexes (grosses géometrie, bcp de changement de material, …) - bcp de fonctions d’outil prédefinies (example classique: chargeur de fichiers) - en plus dans Open. SG: pour des applications multi-thread (parallel processing, clustering) et multi-pipe - pour commencer un nouveau projet 105

Graphes de Scènes: Toujours et pour tout? • Peut-être mal approprié - pour des

Graphes de Scènes: Toujours et pour tout? • Peut-être mal approprié - pour des scènes très dynamique, maintenir la structure peut manger le profit. . ) - pour des scènes très simple (un material, - pour des projets déjà établi 106

#VRML V 2. 0 utf 8 DEF APP_0001 Appearance { #This file is generated

#VRML V 2. 0 utf 8 DEF APP_0001 Appearance { #This file is generated by geo. Shape lib texture Image. Texture { url "test. jpg" # 285 vertex elem, offset: 0 } v -212. 285995 -65. 909798 27. 430000 } v -182. 104004 -55. 423100 34. 799999 Transform { v -270. 171997 -106. 214996 0. 000000 translation -1 0 0 v -212. 285995 -65. 909798 -27. 430000 children [ v 195. 158005 -14. 477000 0. 000000 Shape { appearance USE APP_0001 geometry Indexed. Face. Set { coord Coordinate { point 3. ) Format de Fichiers 3 D [ 370363 0 -285019, 370363 10. 35 -285019, 370365 0 -285012, 370365 10. 35 -285012 ] } v -143. 682999 -62. 438801 43. 180000 v -243. 022995 -34. 044998 0. 000000 v 211. 268005 -58. 594200 -11. 940000 v 240. 934006 -65. 579002 -73. 150002 v 240. 934006 -65. 579002 73. 150002 v 211. 268005 -58. 594200 11. 940000 - VRML - OBJ … v -106. 839996 40. 523998 -22. 350000 v -199. 781998 -16. 746000 -31. 750000 v 37. 980999 60. 744999 0. 000000 v -182. 104004 -55. 423100 -34. 799999 v -143. 682999 -62. 438801 -43. 180000 v -104. 494003 -60. 085899 -41. 150002 tex. Coord Texture. Coordinate { v -13. 839000 -62. 945202 -38. 099998 point [ 0 0, 1 1, 0 1 v -106. 888000 -79. 097000 -80. 010002

VRML • Virtual Reality Modeling Language (VRML) • Format de fichier pour des objets

VRML • Virtual Reality Modeling Language (VRML) • Format de fichier pour des objets et mondes 3 D interacitfs. • concue pour être utilisé sur Internet, Intranets, et Client/Serveur Apps • fomat d’interchange universel • bcp d’applications: visualisation scientifique, présentation multimedia, divertissements, éducation, pages Web, mondes virtuelles partagés, apps pour des ingénieurs (CAO, …) 108

VRML Historique - VRML 1. 0 Mai 1995 - VRML 2. 0 Août 1996

VRML Historique - VRML 1. 0 Mai 1995 - VRML 2. 0 Août 1996 (gros changement) - VRML 97 Décembre 1997 (petit changement) Extension: . wrl 109

VRML 97 – Critère de Design • Authorability - logiciel créent, éditent, et maintiennent

VRML 97 – Critère de Design • Authorability - logiciel créent, éditent, et maintiennent et convertissent des fichier VRML • Composability - reutilisation de fichier VRML grace aux combinaison possible • Extensibility - possible d’ajouter des types d’objet non-defini • Be capable of implementation • Performance (scalable) • Scalability (large 3 D worlds) 110

VRML 97 - Characteristiques • VRML peut représenter - des objet multimedia 3 D

VRML 97 - Characteristiques • VRML peut représenter - des objet multimedia 3 D - statique et dynamique animé - avec des URL’s aux autres formats medias comme text, sons, films, et images. • indépendance de la plateforme • extensibilité qui permet de définir de nouveux objets dynamiques 3 D 111

VRML 97 Fichiers VRML contiennent: Le Header #VRML V 2. 0 utf 8 Commentaires

VRML 97 Fichiers VRML contiennent: Le Header #VRML V 2. 0 utf 8 Commentaires – ligne commencent par # Nodes – Information sur la scène Fields – Attributs des Nœuds (SF, MF) Values – valeurs des attributs et plus. . . 112

VRML 97 #VRML V 2. 0 utf 8 # A Cylinder Shape { appearance

VRML 97 #VRML V 2. 0 utf 8 # A Cylinder Shape { appearance Appearance { material Material { } } geometry Cylinder { height 2. 0 Remarque: ASCII – UTF 8 Format Pour lisbilité et « edit by hand » radius 1. 0 } } 113

VRML 97 À voir: • Le Tutorial SIGGRAPH http: //www. sdsc. edu/~nadeau/Courses/Siggraph 98 vrml/vrml

VRML 97 À voir: • Le Tutorial SIGGRAPH http: //www. sdsc. edu/~nadeau/Courses/Siggraph 98 vrml/vrml 97. htm • La Spécification VRML 97 () http: //www. web 3 d/Specifications/VRML 97/ • Disponible sur la page du cours: http: //www. labri. fr/~preuter/image. Synthesis/scene. Graphs 114

Alias. Wavefront’s OBJ - format de texte également - très simple - pour répresenter

Alias. Wavefront’s OBJ - format de texte également - très simple - pour répresenter des maillages en Open. SG et VRML: indexed. Face. Set - extension: . obj 115

Alias. Wavefront’s OBJ 3 # commentaire v 0 0 0 # vertex index 1

Alias. Wavefront’s OBJ 3 # commentaire v 0 0 0 # vertex index 1 position x y z 1 2 v 1 0 0 # vertex index 2 v 0 1 0 # vertex index 2 f 1 2 3 # face 1 2 3 # attention: Index commence à 1 !! 116

Alias. Wavefront’s OBJ # commentaire 3 v 0 0 0 # vertex index 1

Alias. Wavefront’s OBJ # commentaire 3 v 0 0 0 # vertex index 1 position x y z v 1 0 0 # vertex index 2 v 0 1 0 # vertex index 2 … 1 2 vt 0 0 # texture index 1 vt 1 0 # texture index 2 vt 0 1 # texture index 3 … f 1/1 2/2 3/3 # vertex/texture 117

Alias. Wavefront’s OBJ # commentaire … vn 0. 7 0 # vertex normal index

Alias. Wavefront’s OBJ # commentaire … vn 0. 7 0 # vertex normal index 1 direction x y z vn 0 0. 7 # vertex normal index 2 vn 0 1 0 # vertex normal index 3 … f 1//1 2//2 3//3 # vertex//normal f …. … …. . . 118

Alias. Wavefront’s OBJ # ou bien f 1/1/1 2/2/2 3/3/3 # vertex/texture/normal f …

Alias. Wavefront’s OBJ # ou bien f 1/1/1 2/2/2 3/3/3 # vertex/texture/normal f … …. . … 119

Alias. Wavefront’s OBJ # negative indices pour décrire des groupes v -0. 500000 0.

Alias. Wavefront’s OBJ # negative indices pour décrire des groupes v -0. 500000 0. 000000 0. 400000 v -0. 500000 0. 000000 -0. 800000 v -0. 500000 1. 000000 0. 400000 f -4 -3 -2 -1 120

Alias. Wavefront’s OBJ # extension G # début d’un groupe Usemtl red # utiliser

Alias. Wavefront’s OBJ # extension G # début d’un groupe Usemtl red # utiliser un fichier. mtl pour décrire le matérial 121

Alias. Wavefront’s OBJ v 111 f 1342 v 1 1 -1 f 5786 v

Alias. Wavefront’s OBJ v 111 f 1342 v 1 1 -1 f 5786 v 1 -1 1 v 1 -1 -1 f 1562 f 3784 v -1 1 1 v -1 1 -1 v -1 -1 1 f 1573 f 2684 v -1 -1 -1 122

Même chose en VRML #VRML V 2. 0 utf 8 Shape { appearance Appearance

Même chose en VRML #VRML V 2. 0 utf 8 Shape { appearance Appearance {. . . } geometry Indexed. Face. Set { coord Coordinate { point [# X Y Z 1. 0, 1. 0 – 1. 0, …] } coord. Index [0, 2, 3, 1, -1, 4, 6, 7, 5, -1, …. ] }} 123