Title: Graphes de scnes lexemple de OpenSG
1Graphes de scènesà lexemple de OpenSG
- Patrick Reuter
- LaBRI INRIA futurs
- Université Bordeaux I
2Programme
- 1.) Graphe de Scènes
- Motivation
- Exemples
- 2.) OpenSG
- Motivation
- Introduction
- Exemples
- 3.) Format de Fichiers
- 3D scène (VRML)
- 3D maillages (OBJ)
31.) Graphe de Scènes
4Motivation Scene Graphs
- OpenGL 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
5Motivation 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 lutiliser le plus souvent possible
- Orienté Objet
- Beaucoup doptimisation possible
- Graphes de Scènes pour OpenGL sont ce qui est
STL pour C - Exemple Maison
6Graphe de Scène - structure
Racine
- Directed
- Acyclic
- Heterogène
- Structure logique dans les noeuds intérieurs
- Geometrie (ou autres primitives) dans les
feuilles, p.ex. polygonal meshes
Lumière
Groupe (Voiture)
Groupe (Roux)
Group (Carosserie)
Transformations
Roux - geo
7Le graphe de scène dans larchitecture
p.ex. VRJuggler, CoVise, Virtual Design 2,
Avalon, DBview, CATIA, OpenMask, WorldToolKit
(WTK),
Système Réalité Virtuelle, Application CAO (CAD),
...
Graphe de Scène
p.ex. Performer, OpenSG, OpenInventor,
Java3D, OpenSceneGraph, Y,
OpenGL
Système (UNIX, Windows)
8Graphes de Scènes - Exemple
9Graphes de Scènes - Exemple
10Graphes de Scènes - Exemple
11Graphes de Scènes - Exemple
Comment cest fait en VRML 97 ?
12Graphes de Scènes - Exemple
geometry indexedFaceSet
coord Coordinate point 0.3
0.65 0.4, 0.2 0.3
0.4, Coordinate
coordIndex 0,1,2, -1,
3,4,5, -1,
ifs Shape Transform
position x y z orientation nx,
ny, nz children
Transform Transform .
Transform
avion
VRML V2.0 utf8 DEF avion Transform position
x y z orientation x y z angle
children Shape material
Material diffuseColor r g b
13Graphes de Scènes Actions
- Bonne structure, mais pourquoi?
- RenderAction rendu de la scène
- IntersectAction intersection (p.ex. pour
selection ou collection) - Facilite les interactions (Rendu dune partie de
la scène, )
14Graphes de Scènes Exigences
Facile à utiliser
- Performance
- - multi-thread (parallel processing)
- - state-sorting
- - proche du hardware
- -
- Généralité
- - cross-plateforme (Win32, Linux, IRIX, )
- - multi-pipe (CAVE, Powerwalls, Reality Centers,
) - - extensible
- -
15Graphes de Scènes Exigences multi-threading
- Graphe de Scène stocke les données de la scène
- Tasks multiples indépendants
- Peuvent marcher en parallel
- Peuvent être asynchrone
16Graphes de Scènes Exigences multi-pipe
- au LaBRI Hemicyclia (SGI Reality Center)
17Systèmes existantes
Open Inventor
Performer
Y
Cosmo3d
Optimizer
DirectModel
OpenGL
Java3d
Fahrenheit
OpenSG
18OpenInventor - Graphes de scènes existants
- OpenInventor (http//www.sgi.com/Technology/Inven
tor) et (www.tgs.com) et (www.coin3d.com) - le plus vieux graphe de scène mais toujours
utilisé - beaucoup doutils (Viewer, )
- simple à utiliser
- - mauvaise performance
- - pas de support multi-thread
- - pas de support multi-pipe (Ã part une extension
de la version de TGS) - - OpenSource (version SGI, Coin3D), pas
OpenSource (version TGS) - - disponibilité seulement Linux/IRIX (version
SGI), Win32, HP, SUN (version TGS)
19Performer - Graphes de scènes existants
- SGI Performer (http//www.sgi.com/software/perfor
mer) - très vieux
- performance (state-sorting, APP-CULL-DRAW)
- support multi-pipe
- support multi-thread (mais limité)
- - difficile
- - pas OpenSource
- - pas extensible aux nouvelles architectures
- - disponibilité seulement Linux/IRIX, Windows Ã
partir de la Version 3.0
20Java3D - Graphes de scènes existants
- Java3D (www.java3d.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
21Graphes de Scènes - Visions
- Echec Fahrenheit (Coopération SGI Microsoft)
- Utilisateur veulent pas être dépendant de
lindustrie - Utilisateur veulent pas être dépendant dun
système dexploitation - Besoin dun standard
- ? Solution OpenSG ?
22OpenSG
OpenGL
System (UNIX, Windows)
23Buts de OpenSG
- 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
24! Buts de OpenSG
- ce nest pas un système VR
- outils pour device handling, interaction etc.
sont disponible dans - Maverick, CaveLib, VRJuggler, VRPN
- unique API graphique
- OpenGL est disponible partout et est une bonne
alternative
25Developpement
- Developpé comme Open Source
- Sources diponible de www.opensg.org and
www.sourceforge.net/projects/opensg - Communication via SourceForge Mailing lists ou
IRC (Galaxynet OpenSG) - Contributions bienvenues
- Platforms
- Now Irix, Linux, Windows (VS .NET, ICC)
- Experimentation MacOS X, HP-UX
- A venir SUN Solaris
26O.I.N.O.S.
- OpenSG nest pas Open Scene Graph!
- Deux projets totalement indépendants
- Début en meme temps
27Membres du Forum OpenSG
INI-GraphicsNet FondationInstituto Superior
TecnicoMax-Planck-Institut für
InformatikSilicon Graphics GmbHVolkswagen
AGSiemens AG, ZTvrcom GmbHTU DarmstadtTU
München
ABB Research CenterAUDI AGBMW AG Daimler
Chrysler AGDaimler Chrysler Aerospace AG EDS PLM
SolutionsFraunhofer IAOFraunhofer
IGDFraunhofer IMK
28- Partners IGD, TU Darmstadt, TU Braunschweig, U
Bonn, U Stuttgart, U Tübingen, MPI Saarbrücken,
RWTH Aachen, ZGDV, OpenSG Forum - 4 domaines Low-Level, Large Scene Support,
High-Level Primitives, High-Level Shading - 2/01 Ã 12/03
- www.opensg.org/OpenSGPLUS
29Status Roadmap
- 1.1 Developer Release, June 2002
- Stereo, Multipipe
- Premiers résultats OpenSG 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
302.) OpenSG
Un Graphe de Scène OpenSource Une librairie
à utiliser comme nimporte quelle autre librairie
31Structure de la librairie
- Base Lib (Source/Base) (libOSGBase.so)
- Basic math, Field, Réseaux, abstraction OS,
Volumes - System Lib (Source/System) (libOSGSystem.so)
- Le graphe de scène Noeuds / Loader /
Cluster / Material / Window / ... - Window System Libs (Source/WindowSystem)
(libOSGWindowGLUT.so, libOSGWindowQT.so,
libOSGWindowX.so, ...) - Un par Windowsystem
32BaseLib
- Namespace OSG
- OSG_USING_NAMESPACE or OSG
- OSG_BEGIN_NAMESPACE, OSG_END_NAMESPACE
- Types de Base (OSGBaseTypes.h) (pour assurer
cross-plateforme) - UInt8163264
- Real3264
- bool
- UChar8
33BaseLib
- Fonctions de Maths
- Real32 and Real64 variants (template)
- osgsin, osgcos, osgabs, osgpow, osgfloor etc.
- deg2rad rad2deg
- Normalement en radiant à part explicitement
determiné - QuaternionsetValueAsAxisRad
- QuaterniongetValueAsAxisDeg
34BaseLib
- Nécessite Startup / Termination calls
(OSGBaseFunctions.h) - osgInit(Int32 argc, Char8 argv)
- osgExit(void)
void main(Int32 argc, Char8 argv)
osgInit(argc, argv) . .
osgExit()
35BaseLib Vectors / Points
- Variants typés
- Vec234f, Vec2s, Vec4ub, Pnt234fd,
Pnt2s - Interface daccès (getValue, setValue)
- 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 v
v v p p p
36BaseLib Couleurs
- variants typé, comme point/vector
- Color34fub
- RGBA / HSV set/get méthodes
- Interne stocké comme RGBA
- conversions RGBA / HSV
37BaseLib Quaternions
- répresentation dorientation
- set/get de/à différents types de valeurs
- fonctions standards normalize, slerp, mult,
multVec etc. - rien de spécial
38BaseLib Matrices
Matrix
- Stockage comme dans OpenGL
- ? column major!
Mémoire
39BaseLib Matrices
Vec3f
Vec3f
Matrix(
,
- operators
- Constructeurs à partir de vecteur
- fonctions à base de vecteur
- Sont également column-major!
,
Vec3f
,
Vec3f
)
Matrix
40BaseLib Matrices
- Attention Real32 constructeur
- et setValue(m00,m10,m20,m30,
- m01, m11, m21, m31,
- m02, m12, m22, m32,
- m03, m13, m23, m33)
,
Matrix(
,
,
,
,
,
,
,
,
,
,
,
)
,
,
,
Row major! Sinon, utiliser setValueTransposed!
41BaseLib Manipulation des matrices
- m1.mult(m2) m1 m2 m1.multLeft(m2)
m2 m1 - setTranslate / setRotate / setScale
- Affecte seulement la partie specifié
- setTransform() affecte la matrice entière
- void MatrixsetTransform(Vec3f trans, Quat rot,
Vec3f scale) - inverse / transpose
42BaseLib Volumes
- Volumes englobantes pour le Culling
- Types
- BoxVolume
- SphereVolume
- CylinderVolume
- FrustumVolume
- DynamicVolume
- Flags pour des états spécial
- Valid (invalide nest pas mis à jour)
- Empty
- Infinite (toujours visible)
- Static (ne change pas)
43BaseLib Volumes
- Manipulation
- clear
- extendBy (Point or Volume)
- transform
- Accès
- getCenter
- getBounds(min, max)
- Test
- intersect(Point/Line/Volume)
44BaseLib Quoi dautres ?
- Line / Plane
- Date / Time
- Primitives multi-threading
- Réseaux (Socket, Connection, Select)
- ...
45SystemLib
46Fields
- définie à partir de BaseType
- membres de données de FieldContainer (Nodes,
...) - Donne information sur eux-mêmes
- Cardinality
- Size
- Name
- Stored type
- Conversion de et à string / binaire
- Cardinalité Single or Multi
47Single Fields
- unique valeur
- Interface
- getValue(), setValue(value), setValue(field)
- Naming Convention
- SFltTypeNamegt
- Exemple
- SFInt32
- SFNodePtr
48MultiFields
- arrays 1D
- Similaire à STL vectors
- Iterators, begin(), end(), insert(), erase(),
push_back(), etc. - Additionallement
- addValue(val)
- getValue(UInt32 index), setValue(val, index)
- vectorlttypegt getValues()
49FieldContainers
- Principaux types de FieldContainer
- - Node
- - NodeCores
- - State, Materials
- - Windows
- Reflective
- fournit information sur lui-même
- fournit accès generique (auto Chargeur / GUI)
- partageable
- support Multi-thread
- support Cluster
- Extensible
- Configurable
50SystemLib Structure du Graphe de Scène
- Proposition 1 (OpenInventor)
- Chaque nud à un parent
- - redondance de données
Voiture
Carosserie
Moteur
Roues
Transform Roue 1
Transform Roue 2
Transform Roue 3
Transform Roue 4
Géometrie Roue
Géometrie Roue
Géometrie Roue
Géometrie Roue
51SystemLib Structure du Graphe de Scène
- Proposition 2 (OpenInventor)
- Pas de redondance de données
- - parents multiples
Voiture
Carosserie
Moteur
Roux
Transform Rou 1
Transform Rou 2
Transform Rou 3
Transform Rou 4
Géometrie Rou
52SystemLib Structure du Graphe de Scène
- Proposition 3 (OpenSG)
- Chaque nud à un parent
- pas de redondance de donées
Voiture
Carosserie
Moteur
Roux
Transform Rou 1
Transform Rou 2
Transform Rou 3
Transform Rou 4
Géometrie Rou
Géometrie Rou
Géometrie Rou
Géometrie Rou
53SystemLib 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 NodeCore)
- definie le comportement
- stocke les données
- partagé
54SystemLib Node Contents
- Node
- Volume volume englobante (type
SFDynamicVolume) - Parent le parent du noeud
(type SFNodePtr) - Children les enfants du noeud (type
MFNodePtr) - Core Pointer sur le Core
(type SFNodeCorePtr) - AttachmentMap
- Information supplémentaire (type
SFAttachmentMap) - Méthode getToWorld()
55SystemLib Node Contents
- MFNodePtr _children
- UInt32 getNChildren( void
) const - void addChild (const NodePtr
childP) - void insertChild ( UInt32
childIndex, const NodePtr childP ) - void replaceChild ( UInt32
index, const NodePtr childP ) - void replaceChildBy( NodePtr
childP, NodePtr newChildP) - Int32 findChild (const NodePtr
childP ) const - void subChild (const NodePtr
childP ) - void subChild ( UInt32
childIndex) - NodePtr getChild ( UInt32
childIndex )
56SystemLib OpenSG NodeCores
Node Core
Mesh
Env
Impostor
Group
Drawable
Surface
SuperSurface
Billboard
Particles
Transform
Point
Transform Set
Slices
Geometry
Light
Volume
Dist.LOD
Comp. Transform
Switch
Text
Prog. Mesh
Directional
Geom
Spot
Bitmap
Texture
57SystemLib NodeCores - Groups
- Group
- Transform / ComponentTransform
- Switch
- Billboard
- DistanceLOD
- Lights
58SystemLib Group NodeCore
- traverse tous les enfants
- collectionne les données de tous les enfants
59SystemLib Transform / ComponentTransform
NodeCore (hérite de Group)
- Les transformations saccumule en montant larbre
- Transform
- simple transformation matrice (SFMatrix matrix)
- ComponentTransform
- Derivé de Transform
- (style VRML)
Rou
Rotation de direction
Rotation de mouvement
Géometrie
60SystemLib NodeCores Switch (hérite de Group)
- Traverse un, aucun, ou tous les enfants
- Controlé par un champs SFInt32 choice
- choice -1 aucun
- choice -2 tous
- 0 lt choice lt nchildren enfant no. choice
61SystemLib NodeCores Billboard (hérite de Group)
- Transformation qui pointe toujours vers la camera
(système de coordonnés local axe Z vers
lobservateur)
Quand lobservateur bouge à droite . le
Billboard soriente automatiquement vers
lobservateur
62SystemLib NodeCores DistanceLOD (hérite de
Group)
- DistanceLOD choisie lenfant en fonction de la
distance de lobservateur et le Field SFPnt3f
center - LOD discrets, transitions entre les LOD stocké
dans MFReal32 range field - Utilise lenfant dans le range approprié
Range0
Range1
Range2
Range3
Range4
Enfant 0
Enfant 1
Enfant 2
Enfant 3
rien
rien
63SystemLib NodeCores - Lights
- Lumières ont besoin de deux endroits dans le
Graphe de Scène - Un pour déterminer quoi est éclairé
- Definie par la position dans larbre, tous les
enfants sont éclairé - Un deuxième pour définir sa position/orientation
- Definie par un autre noeud, appelé beacon
- Fields
- Activation SFBool on
- Couleurs SFColor3f ambient, diffuse, specular
- Beacon SFNodePtr beacon
- Attenuation SFReal32 constantAttenuation,
linearAttenuation,quadraticAttenuation
Racine
Montagnes
Lumière
Beacon
Voiture
Route
Carosserie
Roux
64SystemLib NodeCores DirectionalLight (hérite
de Light)
- Source de lumière infiniment distant
- Rayon de lumière parallele
- Fields
- SFVec3f direction
65SystemLib NodeCores PointLight (hérite de
Light)
- Source de lumière localisée
- Differentes angles pour un surface plane
- Fields
- SFPnt3f position
66SystemLib NodeCores SpotLight (hérite de Light)
- Lumière emis dans un angle spécifié
- Plus faible en séloignant de la direction
- Sarrête à un angle determinéFields
- SFPnt3f position
- SFVec3f direction
- SFReal32 spotExponent
- SFReal32 spotCutOff
67SystemLib NodeCores - Drawables
- Geometry
- Particles
- Slices (dans la version 1.3, Avril 2003)
68SystemLib NodeCores Drawables - Geometry
- orienté OpenGL
- support de tous les primitives OpenGL
- données directes et indexé
- plusieurs types de primitive possible par noeud
- un matérial (material field)
- Iterateurs pour accès facile
- TriangleIterator
- FaceIterator
- PrimitiveIterator
69SystemLib NodeCores Drawables - Geometry -
Geometry Data
- Données stockés dans des arrays séparés
- Positions, Normals, Colors, TexCoords,
TexCoords1, ... - Types glBegin() types de primitives (GL_POINT,
GL_LINES, GL_TRIANGLE_STRIP, GL_POLYGON etc.) - class GeoPTypesUI8
- Longeurs le nombre de vertices du primitive (
même nombre dentrée comme GeoPTypesUI8) - class GeoPLengthsUI32
- Indexations pour usage multiple de données
- class GeoIndicesUI32
70SystemLib NodeCores Drawables - Geometry -
Geometry Data (non-indexed)
Types
Lengths
Positions
Normals
Colors
...
71SystemLib NodeCores Drawables - Geometry -
Geometry Data (indexed)
Types
Lengths
3
3
4
6
3
3
5
3
Index
Positions
Normals
Colors
...
Dans la troisième partie on revient sur ça
(format de fichiers OBJ, )
72SystemLib NodeCores Drawables - Geometry -
Geometry Tools
- Simple Géometrie (OSGSimpleGeometry.h)
- Nodes makePlane(), makeBox(), makeCone(),
makeCylinder(), makeTorus(), makeSphere(),
makeConicalFrustum() - NodeCores même chose Geo (ex. makeBoxGeo())
- Fonctions Géometries (OSGGeoFunctions.h)
- void calcVertexNormals(GeometryPtr geo)
- void calcFaceNormals(GeometryPtr geo)
- void createOptimizedPrimitives(GeometryPtr geo)
- Crée des strips et fans de triangles à partir
dun maillage
73SystemLib - GeoProperty
- Un FieldContainer pour avoir un array unique
- Flexibilité et typage
- noms typifié, e.g. GeoPositions3f, GeoColors4ub
- Permet de partager les données entre les
géometries - Accès générique
- p.ex. Chaque position comprend addValue(Pnt3f
val) ainsi que Pnt3f getValue(UInt32
index)
3f
3f
3s
4ub
2f
74Particles
- Rendu de la géométrie active
- Points, Lignes, Quadrilatérales, ...
- Données
- Positions, secPositions (GeoPositionsPtr)
- Normals (GeoNormalsPtr), Colors (GeoColorsPtr)
- sizes (MFVec3f)
- drawOrder (UInt32) Any, BackToFront, FrontToBack
75SystemLib NodeCores Drawables - Geometry
Slices (Ã partir de 1.3)
- Très simple NodeCore pour le Rendu volumique
- Rendu des coupes aligné observateur
- Fields SFMaterialPtr material , SFUInt32
numberOfSlices, SFVec3fsize - A suivre dans OpenSG Plus
76SystemLib Materials
- comme les états OpenGL
- Exceptions transformation, lights
- Contrôleur for the Rendering
- Drawable NodeCores appellent leur material Ã
rendre eux-mêmes - Peut contrôler Multipass Rendering etc.
77SystemLib SimpleMaterial (hérite de Material)
- Simple standard OpenGL Material
- Couleurs (SFColor3f) ambient, diffuse, specular,
emission - Shininess (SFReal32)
- Transparency (SFReal32) automatique blending
et sorting - Lit (SFBool) éclairé ou pas
- ColorMaterial (SFUint32)
- Definie linteraction entre les couleurs de la
géométrie et de léclairage - Par défaut GL_DIFFUSE
78Lighting Parameters
79SystemLib SimpleTexturedMaterial (hérite de
Material)
- Même que SimpleMaterial, mais en plus
- Image (SFImageP) limage de texture
- minFilter magFilter (SFUInt32) filtrage
- Utilise des paramètres de OpenGL (p.ex.
glTexParameter) - envMode (SFUInt32) environnement de texture.
Comment combiner lumière et texture, par
defautdefault GL_REPLACE, alternatives
GL_MODULATE, GL_DECAL, voir détails dans OpenGL - envMap (SFBool) si la texture doit être utiliser
comme Environment Map
80SystemLib Image
- Traite plusieurs formats différents
(L,LA,RGB,RGBA, ...), Images 3D, mipmaps and
multi-images - img-gtread(Char8 name) // ouvre le fichier
- Charge de formats PPM, TIFF, JPG, RGB, PNG,
enregistre PPM, TIFF, JPG, RGB - (Nest pas thread-safe encore)
81SystemLib Environment Maps
- Used to simulate reflections
82SystemLib Format de Fichiers supporté
- Formats
- VRML97 (Ã voir dans la partie 3)
- OFF
- AliasWavefront OBJ (Ã voir dans la partie 3)
- RAW
- OSG (format propriétaire)
- BIN
- Chargeur générique (OSGSceneFileHandler.h) Node
Ptr root SceneFileHandlerthe().read(fileName)
83SystemLib Tree Traversals Actions
- Types
- Drawing DrawAction
- Rendering RenderAction
- Picking IntersectAction
- Creation
- act xxxActioncreate()
- Traversal
- act-gtapply( root )
84SystemLib DrawAction (hérite de Action)
- Appelle directement les commandes OpenGL
- Passé a la fenêtre
- Maintenant remplacé par RenderAction
85SystemLib RenderAction (hérite de Action)
- Construit un DrawTree 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
86SystemLib IntersectAction (hérite de Action)
- Intersection de la scène avec un rayon
- Utilise une Line pour définir la rayon
- act-gtsetLine( l )
- Retourne
- Object frappé
- Triangle frappé
- Point frappé
87SystemLib Simple Traversals
- Souvent définir une nouvelle action nest pas
nécessaire - un simple appelle dune 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 08traverse
88SystemLib - Windows
- Comme OpenGL
- OpenSG ne crée pas de fenêtres
- Garde linformation pour le rendu
- Contexte et objets OpenGL (p.ex. textures)
- Viewports
89SystemLib - Windows
- Initialisation
- Mettre les paramêtres de la fenêtre
(displayFunction etc.) - appeler init()
- Necessite de savoir quand la taille de la fenêtre
change - appeler win-gtresize()
- Necessite de savoir début et fin dun frame
- appeler frameInit() et frameExit()
- Ou appeler window-gtrender()
90SystemLibs Windows - Viewports
- Partage la fenêtre en plusieurs parties
- E.g. left0, right100, bottom-1, top0.5 crée
un Viewport de largeur 100 pixel dans la moitié
bas de la fenêtre - Stocke le paramêtres de rendu
- Background, Camera, Root Node, Foregrounds
w pixel
h pixel
h/2 pixel
100 pixel
91SystemLib Windows - Background
- Definie le fond avant laffichage de la frame
- Variantes
- SolidBackground
- Une couleur
- GradientBackground
- Un nombre de couleurs spécifiés à des postitions
différents - SkyBackground
- Similaire de VRML
92SystemLib Windows - Camera
Root
- Definie les paramêtres de la projection ainsi que
la position/orientation de lobservateur - Attributs générales
- Position/orientation sont definie dans un noeud
du graph (SFNodePtr beacon)Par défaut Y en haut,
et regarde negative axe Z (comme OpenGL) - SFReal32 near et far distance
- PerspectiveCamera Vertical field of view (fov)
- MatrixCamera pour spécifier les matrices
Scene
Transform
Beacon
Camera
Viewport
93SystemLib Windows - Camera Decorators
Root
- Décore le Caméra
- Tiled Displays
- Stereo
- Projection Systems
Transform
Scene
Beacon
Camera
DecoRight
DecoLeft
PortLeft
PortRight
94SystemLib Windows - Foreground
- Appelé après le rendu du Viewport
- Plusieurs sont possible
- Existant
- LogoForeground déssine un logo
- SimpleStatisticsForeground
- ...
- Version 1.3
- GraphicsStatisticsForeground
95Applications
- Besoin dune fenêtre
- Le fenêtre a besoin de Viewports qui ont besoin
dun 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 - Alternative Utiliser SimpleSceneManager
Camera
Decorator
Viewports
Background
Window
Foreground
96SystemLib Windows - SimpleSceneManager
- Utilitaire classe pour des applications facile
- Prend un NodePtr pour la racine du Graphe de
Scène et un WindowPtr et fait le reste - crée Camera, Viewport, Headlight
- simule TrackballNavigation
- Doit être informé de
- Resize
- Mouse Move/Button Press/Release
97SystemLib Windows - Trackball Navigation
- Classe pour faciliter les techniques
dinteraction 3D avec la souris - LeftDrag rotation autour du centre
- MiddleDrag translation,
- RightDrag or MouseWheel zoom in/out
- LeftClick définie le centre
98WindowSystemLib
99WindowSystemLibs WindowGLUT - HelloOpenSG.cpp
- int main (int argc, char argv)
- osgInit(argc,argv)
- glutInit(argc, argv)
- glutInitDisplayMode( GLUT_RGB GLUT_DEPTH )
- int winid glutCreateWindow("OpenSG")
- glutReshapeFunc(reshape)
glutDisplayFunc(display) - glutMouseFunc(mouse)
glutMotionFunc(motion) - GLUTWindowPtr gwin GLUTWindowcreate()
- gwin-gtsetWinID(winid) gwin-gtinit()
- NodePtr scene makeTorus( .5, 2, 16, 16 )
- mgr new SimpleSceneManager
- mgr-gtsetWindow( gwin ) // premiere partie de
mgr - mgr-gtsetRoot( scene ) // deuxième partie de
mgr - mgr-gtshowAll() // postionne la caméra
- glutMainLoop()
- osgExit() return 0
- void display( void )
- mgr-gtredraw()
- void reshape( int w, int h )
- mgr-gtresize( w, h )
- glutPostRedisplay()
- void motion(int x, int y)
- mgr-gtmouseMove( x, y )
- glutPostRedisplay()
- void mouse(int button, int state, int x, int y)
-
- if ( state ) mgr-gtmouseButtonRelease( button,
x, y ) - else
- mgr-gtmouseButtonPress( button, x, y )
- glutPostRedisplay()
-
100Graphes Multi-threading beginEditCP, endEditCP
- 1er exemple
- NodePtr scene makeTorus( .5, 2, 16, 16 ) //
OSGSimpleGeometry - 2ème exemple
- NodePtr scene Nodecreate()
- beginEditCP(scene, NodeCoreFieldMask
NodeChildrenFieldMask) -
- scene-gtsetCore(group)
- scene-gtaddChild(.)
- scene-gtaddChild(.)
-
- endEditCP (scene, NodeCoreFieldMask
NodeChildrenFieldMask)
Pourquoi?
101Graphes de Scènes Exigences multi-threading
- Graphe de Scène stocke les données de la scène
- Tasks multiples indépendants
- Peuvent marcher en parallel
- Peuvent être asynchrone
102Multi-threading - Solution Redondance (Data
replication)
- Chaque thread a besoin dune copie séparée
(Performer) - Problème consommation de mémoire
- Quest-ce qui est partagé?
- OpenSG Niveau de Field
Str A
Field Data
Str B
Str A
Str B
Field Data
Str A
Str B
103Multi-threading Cluster Configuration
- Client
- Application
- Ouvre une fenêtre
- Procès serveur générique
- Pratiquement application-indépendent
- Distribution par multicast
104Multi-threading Impacte en programmation OpenSG
- Les pointeurs Standard ne marche plus
- Remplacer ltTypegt par ltTypegtPtr //
Custom Pointer - - Custom dynamic_castltType gt implementation
- Données doivent être repliquées avant dêtre
changées - Système nécessite de savoir quand les données
changent - ? dans OpenSG, lutilisateur doit informer le
système - beginEditCP(FCPtr, fieldmask) // CP est le
CustomPointer - endEditCP (FCPtr, fieldmask)
- Fieldmask un bit par field du FieldContainer,
par défaut tous - Exemple beginEditCP(nodeP,
NodeVolumeFieldMask
NodeChildrenFieldMask)
105Graphes de Scènes Toujours et pour tout?
- Quand est-ce quil fait un sens dutiliser 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 doutil prédefinies (example
classique chargeur de fichiers) - - en plus dans OpenSG pour des applications
multi-thread (parallel processing, clustering) et
multi-pipe - - pour commencer un nouveau projet
-
106Graphes 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
1073.) Format de Fichiers 3D
VRML V2.0 utf8 DEF APP_0001 Appearance
texture ImageTexture url
"test.jpg" Transform
translation -1 0 0 children Shape
appearance USE APP_0001 geometry
IndexedFaceSet coord Coordinate point
370363 0 -285019,
370363 10.35 -285019, 370365 0 -285012,
370365 10.35 -285012
texCoord TextureCoordinate point
0 0, 1 0, 1 1, 0 1
This file is generated by geoShape lib 285
vertex elem, offset 0 v -212.285995 -65.909798
27.430000 v -182.104004 -55.423100 34.799999 v
-270.171997 -106.214996 0.000000 v -212.285995
-65.909798 -27.430000 v 195.158005 -14.477000
0.000000 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 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 v -13.839000 -62.945202 -38.099998 v
-106.888000 -79.097000 -80.010002
- VRML - OBJ
108VRML
- Virtual Reality Modeling Language (VRML)
- Format de fichier pour des objets et mondes 3D
interacitfs. - concue pour être utilisé sur Internet,
Intranets, et Client/Serveur Apps - fomat dinterchange universel
- bcp dapplications visualisation scientifique,
présentation multimedia, divertissements,
éducation, pages Web, mondes virtuelles partagés,
apps pour des ingénieurs (CAO, )
109VRML
- Historique
- - VRML 1.0 Mai 1995
- - VRML 2.0 Août 1996 (gros changement)
- - VRML 97 Décembre 1997 (petit changement)
- Extension .wrl
110VRML 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 dajouter des types dobjet
non-defini - Be capable of implementation
- Performance (scalable)
- Scalability (large 3D worlds)
111VRML 97 - Characteristiques
- VRML peut représenter
- des objet multimedia 3D
- statique et dynamique animé
- avec des URLs 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 3D
112VRML 97
- Fichiers VRML contiennent
- Le Header VRML V2.0 utf8
- Commentaires ligne commencent par
- Nodes Information sur la scène
- Fields Attributs des Nuds (SF, MF)
- Values valeurs des attributs
- et plus . . .
113VRML 97
- VRML V2.0 utf8
- A Cylinder
- Shape
- appearance Appearance
- material Material
-
- geometry Cylinder
- height 2.0
- radius 1.0
-
-
Remarque ASCII UTF8 Format Pour lisbilité et
 edit by handÂ
114VRML 97
- À voir
- Le Tutorial SIGGRAPH
- http//www.sdsc.edu/nadeau/Courses/Siggraph98vrm
l/vrml97/vrml97.htm - La Spécification VRML 97 ()
- http//www.web3d/Specifications/VRML97/
- Disponible sur la page du cours
- http//www.labri.fr/preuter/imageSynthesis/sceneG
raphs
115AliasWavefronts OBJ
- format de texte également
- très simple
- pour répresenter des maillages
- en OpenSG et VRML indexedFaceSet
- - extension .obj
116AliasWavefronts OBJ
3
- commentaire
- 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
- f 1 2 3 face 1 2 3
- attention Index commence à 1 !!
1
2
117AliasWavefronts OBJ
- commentaire
- 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
-
- 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
vertex/texture vertex/texture
3
1
2
118AliasWavefronts OBJ
- commentaire
-
- vn 0.7 0.7 0 vertex normal index 1
direction x y z - vn 0 0.7 0.7 vertex normal index 2
- vn 0 1 0 vertex normal index 3
-
- f 1//1 2//2 3//3 vertex//normal
vertex//normal vertex//normal - f . .. .
119AliasWavefronts OBJ
- ou bien
- f 1/1/1 2/2/2 3/3/3 vertex/texture/normal
vertex/texture/normal vertex/texture/normal - f .. ..
- f .. ..
120AliasWavefronts OBJ
- negative indices pour décrire des gros groupes
- v -0.500000 0.000000 0.400000
- v -0.500000 0.000000 -0.800000
- v -0.500000 1.000000 -0.800000
- v -0.500000 1.000000 0.400000
- f -4 -3 -2 -1
121AliasWavefronts OBJ
- extension
- G début dun groupe
- Usemtl red utiliser un fichier .mtl pour
décrire le matérial
122AliasWavefronts OBJ
- v 1 1 1
- v 1 1 -1
- v 1 -1 1
- v 1 -1 -1
- v -1 1 1
- v -1 1 -1
- v -1 -1 1
- v -1 -1 -1
f 1 3 4 2 f 5 7 8 6 f 1 5 6 2 f 3 7 8 4 f 1 5 7
3 f 2 6 8 4
123Même chose en VRML
- VRML V2.0 utf8
- Shape
- appearance Appearance . . .
- geometry IndexedFaceSet
- coord Coordinate
- point X Y Z
- 1.0 1.0 1.0,
- 1.0 1.0 1.0,
-
-
- coordIndex 0, 2, 3, 1, -1,
- 4, 6, 7, 5, -1,
. -