Présentation de GobLim - Informatique Graphique Moteurs 3D temps réels Guillaume Gilet
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
GobLim G.Gilet Informatique Graphique Moteurs 3D temps réels Présentation de GobLim Guillaume Gilet Guillaume.Gilet@unilim.fr 2012-2013
GobLim Moteurs 3D, en général G.Gilet Programme type I Initialisation I Une boucle principale I Affichage de la scène I Détection et traitement des interactions de l’utilisateur I Mécanismes propres au jeu (I.A., physique,règles...) I Mise a jour des positions/etats des entités
GobLim Moteurs 3D, en général G.Gilet Affichage de la scène I Calcul des informations globales à la scène (lumières, ombres...) I Pour chague objet 3D : I Préparation du pipeline (matrices, communication CPU-GPU...) I Envoi de la géométrie dans le pipeline I Remise en état du pipeline I Calcul post-processing
GobLim GobLim G.Gilet GobLim I Moteur 3D développé au sein de l’équipe SIR I OpenGL 4.+ et OpenGL 3.2 I Windows, Linux et (avec difficulté encore) MacOSX I 2010 - Encore en développement Principe I Proposer une surcouche à la technique I Automatiser chargements, managements des objets OpenGL I Optimisation de mémoire (CPU et GPU) I Permettre de réaliser facilement une idée/test/shader I But : Développer une collection de méthodes de rendu indépendants
GobLim GobLim G.Gilet Dépendances GLFW (optionnel : interface) I Interface et gestion des fenêtres I Gestion des interactions http ://www.glfw.org/ GLEW (optionnel : management OpenGL sous Windows) I Initialisation des extensions/fonctions OpenGL http ://glew.sourceforge.net/GLEW GLM (Pour se simplifier les math) I Utiliser les types et fcontions GLSL en C/C++ http ://glm.g-truc.net/
GobLim Interface (GLFW) G.Gilet Principe I Initialisation du programme (extensions openGL, création de fenêtre, contexte) I Boucle principale I Gère l’affichage I Gère les interactions utilisateurs I Tant que la fenêtre est ouverte
GobLim Interface G.Gilet Initialisation GLFW I Initialisation de l’interface I glfwInit() I Creation de la fenêtre I glfwOpenWindow() I Diverses options (titre, présence du curseur, clavier, buffers...) I Définition des fonctions callbacks I Fonctions appelées par GLFW I En fonction des évènements (utilisateurs ou non) I glfwSetCharCallback() dans le cas de caractères I glfwSetKeyCallback() pour les touches spéciales http ://www.glfw.org/
GobLim Interface G.Gilet Boucle principale
GobLim Interface G.Gilet Boucle principale I Draw() : Affichage de l’écran I Appel à render() de la classe EngineGL
GobLim Interface G.Gilet Boucle principale I Draw() : Affichage de l’écran I Appel à render() de la classe EngineGL I glfwSwapBuffers() : Echange les buffers d’affichage
GobLim Interface G.Gilet Boucle principale I Draw() : Affichage de l’écran I Appel à render() de la classe EngineGL I glfwSwapBuffers() : Echange les buffers d’affichage I Evènement : Action utilisateur I Fonctions callback I void GLFWCALL OnChar(int c,int action) I avec c le caractère I action ∈ [GLFW_PRESS,GLFW_RELEASE] I Mécanisme identique pour la souris, la fenêtre...
GobLim Interface G.Gilet Boucle principale I Draw() : Affichage de l’écran I Appel à render() de la classe EngineGL I glfwSwapBuffers() : Echange les buffers d’affichage I Evènement : Action utilisateur I Fonctions callback I void GLFWCALL OnChar(int c,int action) I avec c le caractère I action ∈ [GLFW_PRESS,GLFW_RELEASE] I Mécanisme identique pour la souris, la fenêtre... Pas de commande OpenGL dans l’interface
GobLim classe Engine G.Gilet Classe Engine I Le coeur du moteur 3D I Gère l’affichage, la création de la scène, l’interaction avec le GPU... I Une fonction initScene() I Création de la scène (Modèles 3D (ModelGL), entités (Node), méthodes de rendu...) I Paramètres OpenGL (couleur de fond, tests de profondeur...) I Une fonction render() I Nettoyage des buffers I Collecte des Node du graphe I Appel de la fonction render() des Node I C’est ici qu’on va travailler
GobLim Les scène 3D G.Gilet classe Scene I Gère le graphe de scène I Graphe de Node I Une racine (root) I Un ensemble de manager de ressources I Gère liste des modèles 3D, Nodes... I Contient une Camera Utilisation de Scene I C’est un singleton I Des constructeurs/destructeurs privés I Utiliser Scene : :getInstance()
GobLim G.Gilet Gestion des Node I Chaque Node identifié par un nom I Creation des Node au vol I Dans Scene : Un manager de Node I Dans Scene : Node* getNode(name) Gestion des ModelGL I Un manager de ModelGL I Chaque ModelGL identifié par un nom I Creation des ModelGL au vol I Dans Scene : Un manager de ModelGL I Dans Scene : ModelGL* getModel(string name)
GobLim Les entités 3D G.Gilet class Node I Entité 3D : Les objets de la scène I Regroupe une géometrie (Model), une méthode de rendu(Material) et un repère 3D(Frame) I Des fonctions setModel(Model*) et setMaterial(Material*) Classe ModelGL (hérite de Model) I Gestion d’un modèle géométrique (stocké au format .obj) I Création de Vertex Buffer Object (VBO) sur le GPU I Une fonction drawGeometry() I Envoie la géométrie dans le pipeline graphique
GobLim Méthode de rendu G.Gilet Un MaterialGL I Correspond à une méthode de rendu I Charge des GLProgram et un GLPipelineProgram (m_ProgramPipeline) I Deux pointeurs vp et fp sur des GLProgram I Une fonction render() I Envoyer les informations nécessaires aux GLProgram I Activer notre objet pipeline (bind() de GLPipelineProgram I Envoyer la géometrie (drawGeometry() de Node I Desactiver le pipeline (release() de GLPipelineProgram
GobLim Un Pipeline Program G.Gilet Un GLPipelineProgram I Les étapes programmables du pipeline graphique I Pointe sur les GLProgram utilisés pour une exécution du pipeline I Nécessite au moins un Vertex program et un Fragment program I Changement dynamique des GLProgram utilisés à chaque étape (vertex,fragment...) I Lié en mémoire graphique I Une fonction d’activation ( bind()) et de désactivation ( release())
GobLim Les programs (shaders) G.Gilet Plusieurs GLProgram I Peut être de plusieurs type (Vertex, Fragment...) I Un shader lu dans un fichier I Compilé et lié (inscrit en mémoire graphique) séparement I Possède un espace en mémoire graphique pour ses variables globales I Contient un manager de variables I Convention de nom : NomFichier-VS.glsl : Vertex Shader I Convention de nom : NomFichier-FS.glsl : Fragment Shader
GobLim Communication avec le GPU G.Gilet En OpenGL < 3.0 I Mode direct I A chaque frame : I Activer le program I Envoyer les informations au GPU (glUniform...) I Contraintes et envoi d’information GobLim (OpenGL 4+) I Accès direct à la mémoire graphique (DSA) I Chargement arbitraire I Pointeurs sur la mémoire graphique I Pour chaque GLProgram : Un manager de variables GPU : GLUniformManager* uniforms()
GobLim Communication avec le GPU G.Gilet Principe I Demander au manager un pointeur sur la mémoire graphique I Un type GPUVariable : GPUvec3,GPUmat4,GPUfloat... I Des fonctions GPUvec3* getGPUvec3(name), GPUmat4* getGPUmat4(name) I avec name le nom de la variable dans le shader correspondant I Une fonction Set() pour charger en mémoire graphique Exemple : Matrice de transformation/projection (MVP) I Dans le Material PremierTP : I Une GPUVariable* : GPUmat4* ModelViewProj ; I Lors de l’initialisation, récupération du pointeur mémoire graphique : I ModelViewProj = vp->uniforms()->get("MVP") ; I Lors de l’affichage, envoi des informations : I ModelViewProj->Set(...) ;
GobLim La caméra G.Gilet Classe Camera I Le point de vue du rendu I Permet d’effectuer la projection I Contient une matrice de projection et un repère (Frame) I Définition d’une projection I Orthographique : setOrthographicProjection() I Perspective : setPerspectiveProjection() et setFrustum() I Une fonction de placement (lookAt()) I Des fonctions de déplacement spécifiques (translate(),rotate()) I Une caméra doit être "‘liée"’ è la scène (link())
Vous pouvez aussi lire