Opengl 5 Opengl
Total Page:16
File Type:pdf, Size:1020Kb
1 Graphe de Scène SceneGraph Jean-Christophe Lombardo [email protected] 2 Pattern composite • Objectif : Traiter de façon unifiée un objet ou un composite • Moyen : Classe de base dérivée en feuille et en composite class Base {...}; class Leaf : public Base {...}; class Composite : public Base { public: void addChild(Base *) ... }; • Application au rendu 3D = graphe de scène ! [email protected] 3 Merci de votre attention ! 4 OpenGL 5 OpenGL Très proche du hardware Machine à états •Transformation courante •Matériaux courant •Texture courante •… Pile pour stocker •Les transformations •Les attributs •... Performance : Limiter les changement d'état N'envoyer que ce qui est visible à la carte graphique [email protected] Commentça marche ? Principale Mémoire CPU Evaluation Graphique Vertex Op Mémoire GPU [email protected] Rasterization Fragment Op Frame Buffer 6 http://www.opengl.org/documentation/specs/version1.1/state.pdf TexCoord Rappel : OpenGL = pipeline Normale Couleur Texture Vertex Pixelmode (stockage / transfert) Projection Matrice TexCoord Courante Courante Courante Normale Couleur Mémoire Texture ModèleVue Éclairage & Éclairage Couleurs Opérations les sur fragments Opérations Matrice Assemblage primitivesdes Rasterisation Clipping TexGen [email protected] (division par w) Viewport Texture Matrice Frame buffer Frame (Image) 7 http://www.opengl.org/documentation/specs/version1.1/state.pdf TexCoord Rappel : OpenGL = pipeline Normale Couleur Texture Fragment Vertex Pixelmode (stockage / transfert) Projection Matrice TexCoord Courante Courante Courante Normale Couleur Mémoire Texture Éclairage & Éclairage ModelVue Couleurs Opérations les sur fragments Opérations Matrice Assemblage primitivesdes Rasterisation Clipping TexGen [email protected] (division par w) Viewport Texture Matrice Frame buffer Frame Pixels (Image) 0 m i r P t r e V e v i t i x e s 8 9 Exemple • • osgplanets [email protected] 10 Exemple : OpenGL Draw sun Rotate (Y) Translate Rotate (D) Draw earth [email protected] 11 Exemple : OpenGL Draw sun Rotate (Y) Translate glPushMatrix() Rotate (D) Draw earth glPopMatrix() Rotate (M) Translate Draw moon [email protected] 12 Exemple : Ajout d'une planète • • [email protected] 13 Exemple : OpenGL Draw sun Rotate (Y) Translate glPushMatrix() Rotate (D) Draw earth glPopMatrix() Rotate (M) Rotate ? Translate Translate Draw moon Draw mars [email protected] 14 Exemple : OpenGL Draw sun glPushMatrix() Rotate (Y) Translate glPushMatrix() Rotate (D) Draw earth glPopMatrix() • Soit on anticipe et on Rotate (M) push/pop tout le temps glPopMatrix() → Performances ! Translate Soit on anticipes pas Rotate • Draw moon → maintenance du code ! Translate Draw mars [email protected] 15 Exemple : Graphe de Scène • • osgplanets [email protected] 16 Graphe de Scène Composé de •Groupe •Feuille [email protected] 17 Graphe de Scène Approche Orientée Objet Composé de • Groupe – À des fils – Plusieurs types – Groupe – Transformation (Matrice) – Sélection – Niveau de détail – ... • Feuille – Effectue l'opération de dessin – De nombreux types [email protected] 18 Exemple : Graphe de Scène World Rotate (Y) sun Translate Rotate (M) Rotate (D) Translate earth moon [email protected] 19 Exemple : Graphe de Scène World Rotate (Y) Rotate sun Translate Translate Rotate (M) Rotate (D) mars Translate earth moon [email protected] 20 Historique 21 Historique : Préhistoire et Antiquité 70s = PHIGS 80s = sgi (Silicon Graphics Inc.) •IrisGL •SGI Onyx Reality Engine •Bas niveau, C 1992 : OpenGL 1.0 •Spécifications issues de IrisGL •Mark Segal et Kurt Akeley •Consortium •Bas niveau, C [email protected] 22 Historique : Moyen âge 1988 : Iris Inventor (sgi) •Idée : simplifier l'écriture des appli 3D •Objectif : vendre des machines ! •Graphe de Scène, Librairies C++ •Problème : performance •Évolution – Open Inventor (sgi puisTGS) – OpenSource => Coin3D – VRML, X3D, ... [email protected] 23 Historique : Renaissance 1991 : Iris Performer, OpenGL Performer, Performer (sgi) •Idée : Performance •Librairies C++ •Environnement complet pour l'écriture de simulateur : – Graphe de Scène – Gestion du parallélisme – Gestion de la mémoire – ... 1995-2000 Tentatives d'unification •Cosmo 3D, OpenGL ++, Fahrenheit, ... => Échecs [email protected] 24 Bilan : deux approches Famille Inventor Famille Performer •VRML, X3D, OpenSG, ... •Vega, VegaPrime, •Event driven OpenSceneGraph – Boucle passive •Framerate driven – Scène statique – Boucle active – Priorité Utilisateur – Scène dynamique •Création de scène et d'application – Priorité au rendu facile •Simulation •Performance – Multi thread (App Cull Draw) – Niveaux de détails – Database paging – Optimisations diverses [email protected] 25 Ok, et le reste ? VTK Ogre3D Démarre fin 1993 Démarre fin 2001 Pipeline : on empile les filtres qui Wrapper orienté objet au dessus sont appliqués sur les data à la d'OpenGL et DirectX demande Pas vraiment d'organisation des → post traitement données [email protected] 26 OpenSceneGraph http://www.openscenegraph.org/projects/osg 27 OpenSceneGraph Boite à outils graphique haute performances •Open Source •Multi plateformes – linux/unix – Windows – MacOS X •Graphe de scène → Framework Orienté Objet au dessus d' OpenGL Objectifs: •Libérer le développeur de l'implémentation et de l'optimisation des appels graphiques de bas niveaux •Fournir un ensemble d'outils permettant le développement rapide d'applications graphique (simulateurs, jeux, réalité virtuelle, visualisation scientifique, …) [email protected] 28 OSG : Caractéristiques 1/2 •Performance – Culling (view-frustum, occlusion, small feature) – Sorting – Niveaux de détail (LOD) – À jour p/r OpenGL (2.x, 3.x, vertex array, vertex buffer objects, GLSL, …) – Accès facile à OpenGL (extension) •Code de très bonne qualité – Coding rules strictes et suivies – Design Patterns •Extensible – Plugins pour la lecture/écriture des données – Node Kits pour ajouter de nouvelles possibilités •Projets liés – Virtual Planet Builder (génération de terrain) – Present3D (+/- powerpoint 3D) – ... [email protected] 29 OSG : Caractéristiques 2/2 •Portable – IRIX, Linux, Windows, FreeBSD, Mac OSX, Solaris, HP-UX, AIX, OpenGL ES (iPhone & co) et même PlayStation2 ! – Coeur indépendant du système de fenêtrage – osgViewer → systèmes natifs X11, Win32 et Carbon – osgViewer → facilement intégrable (Qt, GLUT, FLTK, SDL, WxWidget, Cocoa MFC) – Interfaces avec Java, Lua et Python •Scalable – Multi CPU – Multi GPU •Communauté dynamique – Support – Extensions – Intégration avec d'autres API (Delta3D) [email protected] 30 C++ Moderne Utilisation de smartpointers standard template library Design pattern •Composite •Singleton •Chaine de responsabilité / Chain of responsibility •Visiteur / Visitor •… [email protected] 31 Architecture •Dernière version stable : 2.8.2 •Nodekits •Version actuelle : 2.9.6 – osgFX •Core – osgParticle – osg – osgSim – osgUtil – osgManipulator – osgDB – osgShadow •Viewer/Windowing Utility – osgTerrain – osgGA – osgText – osgViewer – osgAnimation – osgWidget – ... •Plugins – lecture/écriture (~70) – pseudo loader [email protected] 32 Le coeur d'osg •osg •osgUtil (cont') – Le scene graph lui meme – Modulaire, permet des (Node) implémentations alternatives – Les états openGL (Sate) – Les primitives (Drawable) •osgDB – Les maths – Interface d'entrée sortie – Quelques outils de base osgDB::readNodeFile(file); (ref_ptr, ...) osgDB::writeNodeFile(node, file); osgDB::readImageFile(file); osgDB::writeImageFile(img, file); osgUtil • – Système de plugins – La boite à outils d'osg REGISTER_OSGPLUGIN(ext, class) – Visiteurs – Outils de gestion de fichier – Optimisations (paths, exensions, etc) – Triangulations – Intersections [email protected] 33 Viewer/Windowing Utility •osgGA – Gestion d'évènements clavier/souris – Transforme les évènements en matrice (Manipulator) •osgViewer – En remplacement de Producer (versions osg <2.0) – Fonctionnalité de haut niveau pour créer des viewer – Support des systèmes natifs (Win32, X11 et Carbon) – Facilite l'intégration dans des toolkits existants (Qt, wxWidget, ...) – Gestion de viewer composite (plusieurs vues, plusieurs scènes) [email protected] 34 Nodekits 1/2 •osgFX – Gestion d'effets spéciaux (bump mapping, rendu cartoon, éclairage anisotrope) •osgParticle – Système de particules •osgSim – Extension pour la simulation visuelle (Cf flight simulator) •osgManipulator – Outils pour la manipulation 3D interactive (Cf. OpenInventor) •osgShadow – Gestion des ombres portées. Plusieurs méthode de calcul temps réel dispo. •osgTerrain – Extension pour la représentation de terrain, de SIG (Cf. VPB) •osgText – Gestion de textes de haute qualité [email protected] 35 Nodekits 2/2 •osgWidget – GUI intégrée au graphe de scène •osgAnimation – Animation keyframe + interpolation •osgVolume – Rendu Volumique Lien avec CAO / 3D Modelling Plugins import/export ou export seul