Graphes de scnes lexemple de OpenSG - PowerPoint PPT Presentation

1 / 123
About This Presentation
Title:

Graphes de scnes lexemple de OpenSG

Description:

OpenGL est tr s bas niveau. Immediate mode based. Pas de concepts 'objet' part display ... 1.3: Features & Performance, April 2003 (disponible sur CVS) ... – PowerPoint PPT presentation

Number of Views:247
Avg rating:3.0/5.0
Slides: 124
Provided by: stefanm150
Category:

less

Transcript and Presenter's Notes

Title: Graphes de scnes lexemple de OpenSG


1
Graphes de scènesà lexemple de OpenSG
  • Patrick Reuter
  • LaBRI INRIA futurs
  • Université Bordeaux I

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

3
1.) Graphe de Scènes
4
Motivation 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

5
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 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

6
Graphe 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
7
Le 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)
8
Graphes de Scènes - Exemple
9
Graphes de Scènes - Exemple
10
Graphes de Scènes - Exemple
11
Graphes de Scènes - Exemple
Comment cest fait en VRML 97 ?
12
Graphes 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

13
Graphes 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, )

14
Graphes 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
  • -

15
Graphes 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

16
Graphes de Scènes Exigences multi-pipe
  • au LaBRI Hemicyclia (SGI Reality Center)

17
Systèmes existantes
Open Inventor
Performer
Y
Cosmo3d
Optimizer
DirectModel
OpenGL
Java3d
Fahrenheit
OpenSG
18
OpenInventor - 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)

19
Performer - 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

20
Java3D - 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

21
Graphes 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 ?

22
OpenSG

OpenGL
System (UNIX, Windows)
23
Buts 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

25
Developpement
  • 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

26
O.I.N.O.S.
  • OpenSG nest pas Open Scene Graph!
  • Deux projets totalement indépendants
  • Début en meme temps

27
Membres 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

29
Status 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

30
2.) OpenSG
Un Graphe de Scène OpenSource Une librairie
à utiliser comme nimporte quelle autre librairie
31
Structure 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

32
BaseLib
  • 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

33
BaseLib
  • Fonctions de Maths
  • Real32 and Real64 variants (template)
  • osgsin, osgcos, osgabs, osgpow, osgfloor etc.
  • deg2rad rad2deg
  • Normalement en radiant à part explicitement
    determiné
  • QuaternionsetValueAsAxisRad
  • QuaterniongetValueAsAxisDeg

34
BaseLib
  • Nécessite Startup / Termination calls
    (OSGBaseFunctions.h)
  • osgInit(Int32 argc, Char8 argv)
  • osgExit(void)

void main(Int32 argc, Char8 argv)
osgInit(argc, argv) . .
osgExit()
35
BaseLib 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
36
BaseLib Couleurs
  • variants typé, comme point/vector
  • Color34fub
  • RGBA / HSV set/get méthodes
  • Interne stocké comme RGBA
  • conversions RGBA / HSV

37
BaseLib Quaternions
  • répresentation dorientation
  • set/get de/à différents types de valeurs
  • fonctions standards normalize, slerp, mult,
    multVec etc.
  • rien de spécial

38
BaseLib Matrices
Matrix
  • Stockage comme dans OpenGL
  • ? column major!

Mémoire
39
BaseLib Matrices
Vec3f
Vec3f
Matrix(
,
  • operators
  • Constructeurs à partir de vecteur
  • fonctions à base de vecteur
  • Sont également column-major!

,
Vec3f
,
Vec3f
)
Matrix
40
BaseLib 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!
41
BaseLib 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

42
BaseLib 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)

43
BaseLib Volumes
  • Manipulation
  • clear
  • extendBy (Point or Volume)
  • transform
  • Accès
  • getCenter
  • getBounds(min, max)
  • Test
  • intersect(Point/Line/Volume)

44
BaseLib Quoi dautres ?
  • Line / Plane
  • Date / Time
  • Primitives multi-threading
  • Réseaux (Socket, Connection, Select)
  • ...

45
SystemLib
46
Fields
  • 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

47
Single Fields
  • unique valeur
  • Interface
  • getValue(), setValue(value), setValue(field)
  • Naming Convention
  • SFltTypeNamegt
  • Exemple
  • SFInt32
  • SFNodePtr

48
MultiFields
  • arrays 1D
  • Similaire à STL vectors
  • Iterators, begin(), end(), insert(), erase(),
    push_back(), etc.
  • Additionallement
  • addValue(val)
  • getValue(UInt32 index), setValue(val, index)
  • vectorlttypegt getValues()

49
FieldContainers
  • 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

50
SystemLib 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
51
SystemLib 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
52
SystemLib 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
53
SystemLib 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é

54
SystemLib 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()

55
SystemLib 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 )

56
SystemLib 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
57
SystemLib NodeCores - Groups
  • Group
  • Transform / ComponentTransform
  • Switch
  • Billboard
  • DistanceLOD
  • Lights

58
SystemLib Group NodeCore
  • traverse tous les enfants
  • collectionne les données de tous les enfants

59
SystemLib 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
60
SystemLib 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

61
SystemLib 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
62
SystemLib 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
63
SystemLib 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
64
SystemLib NodeCores DirectionalLight (hérite
de Light)
  • Source de lumière infiniment distant
  • Rayon de lumière parallele
  • Fields
  • SFVec3f direction

65
SystemLib NodeCores PointLight (hérite de
Light)
  • Source de lumière localisée
  • Differentes angles pour un surface plane
  • Fields
  • SFPnt3f position

66
SystemLib 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

67
SystemLib NodeCores - Drawables
  • Geometry
  • Particles
  • Slices (dans la version 1.3, Avril 2003)

68
SystemLib 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

69
SystemLib 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

70
SystemLib NodeCores Drawables - Geometry -
Geometry Data (non-indexed)
Types
Lengths
Positions
Normals
Colors
...
71
SystemLib 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, )
72
SystemLib 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

73
SystemLib - 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
74
Particles
  • 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

75
SystemLib 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

76
SystemLib 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.

77
SystemLib 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

78
Lighting Parameters
79
SystemLib 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

80
SystemLib 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)

81
SystemLib Environment Maps
  • Used to simulate reflections

82
SystemLib 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)

83
SystemLib Tree Traversals Actions
  • Types
  • Drawing DrawAction
  • Rendering RenderAction
  • Picking IntersectAction
  • Creation
  • act xxxActioncreate()
  • Traversal
  • act-gtapply( root )

84
SystemLib DrawAction (hérite de Action)
  • Appelle directement les commandes OpenGL
  • Passé a la fenêtre
  • Maintenant remplacé par RenderAction

85
SystemLib 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

86
SystemLib 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é

87
SystemLib 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

88
SystemLib - Windows
  • Comme OpenGL
  • OpenSG ne crée pas de fenêtres
  • Garde linformation pour le rendu
  • Contexte et objets OpenGL (p.ex. textures)
  • Viewports

89
SystemLib - 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()

90
SystemLibs 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
91
SystemLib 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

92
SystemLib 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
93
SystemLib Windows - Camera Decorators
Root
  • Décore le Caméra
  • Tiled Displays
  • Stereo
  • Projection Systems

Transform
Scene
Beacon
Camera
DecoRight
DecoLeft
PortLeft
PortRight
94
SystemLib Windows - Foreground
  • Appelé après le rendu du Viewport
  • Plusieurs sont possible
  • Existant
  • LogoForeground déssine un logo
  • SimpleStatisticsForeground
  • ...
  • Version 1.3
  • GraphicsStatisticsForeground

95
Applications
  • 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
96
SystemLib 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

97
SystemLib 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

98
WindowSystemLib
99
WindowSystemLibs 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()

100
Graphes 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?
101
Graphes 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

102
Multi-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
103
Multi-threading Cluster Configuration
  • Client
  • Application
  • Ouvre une fenêtre
  • Procès serveur générique
  • Pratiquement application-indépendent
  • Distribution par multicast

104
Multi-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)

105
Graphes 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

106
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

107
3.) 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
108
VRML
  • 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, )

109
VRML
  • Historique
  • - VRML 1.0 Mai 1995
  • - VRML 2.0 Août 1996 (gros changement)
  • - VRML 97 Décembre 1997 (petit changement)
  • Extension .wrl

110
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 dajouter des types dobjet
    non-defini
  • Be capable of implementation
  • Performance (scalable)
  • Scalability (large 3D worlds)

111
VRML 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

112
VRML 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 . . .

113
VRML 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 
114
VRML 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

115
AliasWavefronts OBJ
  • format de texte également
  • très simple
  • pour répresenter des maillages
  • en OpenSG et VRML indexedFaceSet
  • - extension .obj

116
AliasWavefronts 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
117
AliasWavefronts 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
118
AliasWavefronts 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 . .. .

119
AliasWavefronts OBJ
  • ou bien
  • f 1/1/1 2/2/2 3/3/3 vertex/texture/normal
    vertex/texture/normal vertex/texture/normal
  • f .. ..
  • f .. ..

120
AliasWavefronts 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

121
AliasWavefronts OBJ
  • extension
  • G début dun groupe
  • Usemtl red utiliser un fichier .mtl pour
    décrire le matérial

122
AliasWavefronts 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
123
Mê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,
    .
Write a Comment
User Comments (0)
About PowerShow.com