OpenGL Notions avancées



Documents pareils
TPs Architecture des ordinateurs DUT Informatique - M4104c SUJETS. R. Raffin Aix-Marseille Université romain.raffin-at-univ-amu.fr

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Chapitre II : Infographie et bibliothèques graphiques

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Synthèse d'images I. Venceslas BIRI IGM Université de Marne La

Cours d initiation à la programmation en C++ Johann Cuenin

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

GPGPU. Cours de MII 2

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

TD3: tableaux avancées, première classe et chaînes

Généralités sur le Langage Java et éléments syntaxiques.

Programmation impérative

Rappels Entrées -Sorties

Introduction à la Programmation Parallèle: MPI

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Plan du cours Cours théoriques. 29 septembre 2014

TP SIN Traitement d image

Structurer ses données : les tableaux. Introduction à la programmation

Modélisation de la vision humaine

Les structures de données. Rajae El Ouazzani

Analyse de sécurité de logiciels système par typage statique

des outils disponibles et des performances possibles

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmique, Structures de données et langage C

Cours 1: Java et les objets

UE C avancé cours 1: introduction et révisions

Correction des Travaux Pratiques Organiser son espace de travail

TP : Gestion d une image au format PGM

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Création de maquette web

Rendu temps réel de mer et de nuages

HP Designjet 3D Guide d utilisation

LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Les algorithmes de base du graphisme

Chapitre 4 : Guide de Mouvement et Masque

Programmation Orientée Objet Java

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programmer en JAVA. par Tama

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

GL BE FLYER. Chef de projet de l équipe : SCIONICO Pierre

PROJET DE MODELISATION CASERNE SERGEANT BLANDAN

Programmation système I Les entrées/sorties

Les calques : techniques avancées

pcon.planner 6 Préparer et présenter une implantation en toute simplicité

Initiation. àl algorithmique et à la programmation. en C

Cours de numérisation sur Epson Perfection

Arguments d un programme

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Tutoriel : logiciel de présentation Openoffice Impress

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet.

Conventions d écriture et outils de mise au point

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

4. Groupement d objets

Structure du format BMP, sa lecture, sa construction et son écriture

L espace de travail de Photoshop

modélisation solide et dessin technique

Virtual Universe aperçu numéro 1

Exemples d applications. Qu est ce que l Informatique Graphique? Infographie 2D pour l interaction. Introduction

Représentation des Nombres

Couplage d une base de données documentaire à une visualisation interactive 3D sur l Internet

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

.. CSS. Damien Nouvel. Damien Nouvel (Inalco) CSS 1 / 15

Introduction à l héritage en C++

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Créer le schéma relationnel d une base de données ACCESS

Architecture des ordinateurs

Chapitre 2. Classes et objets

2013 Pearson France Adobe Illustrator CC Adobe Press

Responsive Design. Technologies du web. Stéphane Bouvry, 2014

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Introduction à CUDA.

Projet Matlab : un logiciel de cryptage

Dans l Unité 3, nous avons parlé de la

TP1 : Initiation à Java et Eclipse

WHS FutureStation Nano Extras\Options: Général

05/09/2015. M Ponctualité : CM TD TP & Projet Æ En cas d absence : récupérer!!! 3 05/09/2015

Les Angles. I) Angles complémentaires, angles supplémentaires. 1) Angles complémentaires. 2 Angles supplémentaires. a) Définition.

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Vue 2D / 3D / Dessin / Cotation Utilise : Logiciel edrawings Fichier.EPRT Dossier Tp-eDrawings

Développement d un moteur de jeu vidéo pour la console Nintendo Wii U et portage d un jeu

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

79140 CERIZAY. Collège G. CLEMENCEAU. Page 1 sur 18

Vers du matériel libre

Activité 11 : Nuage de points ou diagramme de dispersion

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Traitement numérique de l'image. Raphaël Isdant

Synthèse d images Edmond Boyer

Trucs et astuces pour gagner avec l analyse technique sur les Turbos

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

Transcription:

OpenGL Notions avancées David Odin Septembre 2007 David Odin () OpenGL Notions avancées Septembre 2007 1 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 2 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 3 / 25

TEXTURES OpenGL peut utiliser différents types de texture : Monodimensionnelles (GL TEXTURE 1D), utilisé dans des cas très spécifiques, comme le cell shading. David Odin () OpenGL Notions avancées Septembre 2007 4 / 25

TEXTURES OpenGL peut utiliser différents types de texture : Monodimensionnelles (GL TEXTURE 1D), utilisé dans des cas très spécifiques, comme le cell shading. Bidimensionnelles, (GL TEXTURE 2D) est le cas le plus courant, appelé plaquage d image, David Odin () OpenGL Notions avancées Septembre 2007 4 / 25

TEXTURES OpenGL peut utiliser différents types de texture : Monodimensionnelles (GL TEXTURE 1D), utilisé dans des cas très spécifiques, comme le cell shading. Bidimensionnelles, (GL TEXTURE 2D) est le cas le plus courant, appelé plaquage d image, Tridimensionnelles, (GL TEXTURE 3D), permet de simuler de la 3D volumique, mais très gourmand en mémoire. David Odin () OpenGL Notions avancées Septembre 2007 4 / 25

COORDONNÉES DE TEXTURES De la même façon que l on peut donner une couleur en chaque point d une primitive graphique, il est possible de donner (en général à la place) une coordonnée de texture. On utilise pour cela les fonctions du genre : gltexcoord*(). Par exemple, pour une texture 2D, on pourra spécifier le coin supérieur gauche d une image à l aide de l appel suivant : gltexcoord2f(0.0, 0.0); Ces coordonnées peuvent éventuellement être modifiées par la matrice de texture courante que l on sélectionnera avec l appel suivant : glmatrixmode(gl TEXTURE); Par exemple, l animation suivante est effectuée en ne faisant qu une translation dans la matrice de texture : animation suivante David Odin () OpenGL Notions avancées Septembre 2007 5 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 6 / 25

CHARGEMENT D UNE TEXTURE Avant de pouvoir utiliser une texture, il faut la charger en mémoire vidéo, et positionner pas mal de paramètres. On commence par réserver un descripteur de texture : GLuint texname; glgentextures (1, &texname); puis, on sélectionne cette texture comme texture 2D courante : glbindtexture(gl TEXTURE 2D, texname); Et l on ajuste certains paramètres : gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP S, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE WRAP T, GL REPEAT ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE MAG FILTER, GL NEAREST ) ; gltexparameteri (GL TEXTURE 2D, GL TEXTURE MIN FILTER, GL NEAREST ) ; David Odin () OpenGL Notions avancées Septembre 2007 7 / 25

STOCKAGE DANS LA MÉMOIRE VIDÉO Pour envoyer une image de texture dans la mémoire vidéo, on peut utiliser la fonction suivante : glteximage2d ( GL TEXTURE 2D, / l e type de t e x t u r e / 0, / l e niveau ( mipmapping) / GL RGBA, / format de stockage / largeur, / l a r g e u r en p i x e l s / hauteur, / hauteur en p i x e l s / 0, / l e bord de l a t e x t u r e / GL RGBA, / format des donnees / GL UNSIGNED BYTE, / format d un canal / checkimage / adresse des donnees / ) ; Une fois tout ceci fait, on peut utiliser cette texture 2D, en pensant bien à utiliser un : glenable (GL TEXTURE 2D); et un : gltexenv (GL TEXTURE ENV, GL TEXTURE ENV MODE, GL REPLACE ) ; David Odin () OpenGL Notions avancées Septembre 2007 8 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 9 / 25

ALIASING Les perspectives peuvent être source de problèmes, comme l aliasing : David Odin () OpenGL Notions avancées Septembre 2007 10 / 25

ALIASING Une solution peut-être le mipmapping : David Odin () OpenGL Notions avancées Septembre 2007 11 / 25

IMPLÉMENTATION DU MIPMAPPING OpenGL utilise alors une texture différente suivant la taille de ce qu il doit représenter. L exemple suivant montre un triangle en perspective rempli avec une texture mipmap dont chaque résolution à une couleur différente. David Odin () OpenGL Notions avancées Septembre 2007 12 / 25

STRUCTURE D IMAGE En pratique, on utilise plutôt une version réduite de l image pour les différentes tailles : David Odin () OpenGL Notions avancées Septembre 2007 13 / 25

CRÉATION DE MIPMAPS Pour faciliter la création des différentes textures, on pourra utiliser la fonction suivante : glubuild2dmipmaps (GL TEXTURE 2D, / l e type de t e x t u r e / GL RGBA, / format de stockage / largeur, / l a r g e u r en p i x e l s / hauteur, / hauteur en p i x e l s / GL RGBA, / format des donnees / GL UNSIGNED BYTE, / format d un canal / checkimage / adresse des donnees / ) ; Cette fonction s utilise comme glteximage2d() mais prend en charge la création des différentes images du mipmap. David Odin () OpenGL Notions avancées Septembre 2007 14 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 15 / 25

MULTITEXTURAGE Exemple d utilisation du blending : le multitexturage : * = Question : Quelle combinaison de f s et f d ai-je utilisée? David Odin () OpenGL Notions avancées Septembre 2007 16 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 17 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 18 / 25

LISTE D AFFICHAGE Les listes d affichage (display lists) permettent de stocker des commandes OpenGL pour pouvoir les utiliser plusieurs fois. Ces listes sont référencées par leur numéro. On crée un (ou plusieurs) numéro de liste avec la fonction suivante : GLuint glgenlists (GLsizei range); Ensuite on peut créer les listes proprement dites à l aide de la fonction : void glnewlist (GLuint list, GLenum mode); list est le numéro de la liste que l on crée et mode peut prendre l une des deux valeurs suivantes : GL COMPILE GL COMPILE AND EXECUTE On place ensuite les appels OpenGL que l on désire placer dans la liste, puis on termine la liste en appelant la fonction : void glendlist (void); David Odin () OpenGL Notions avancées Septembre 2007 19 / 25

EXÉCUTION D UNE LISTE on pourra appeler une liste (ce qui exécutera l ensemble des appels de fonctions stockées dans cette liste) avec la fonction : void glcalllist (GLuint list ); Le paramètre list est évidemment le numéro de la liste que l on veut appeler. Il est impossible de modifier une liste, mais on peut la détruire (par exemple pour la recréer ensuite) avec la fonction suivante : void gldeletelists (GLuint list, GLsizei range); Note : on ne peut pas créer une liste à l intérieur d une autre, mais on peut appeler une liste à l intérieur d une autre. David Odin () OpenGL Notions avancées Septembre 2007 20 / 25

OPENGL NOTIONS AVANCÉES PLAN 1 TEXTURES Généralités Paramètres et chargement Mipmapping Multitexturage 2 OPTIMISATIONS CLASSIQUES Liste d affichage Tableaux de sommets David Odin () OpenGL Notions avancées Septembre 2007 21 / 25

TABLEAUX DE SOMMETS OpenGL sait gérer 6 types de tableaux : Coordonnées de Sommets, Couleurs, Coordonnées de Normales, Coordonnées de Texture, Coordonnées d index de couleurs, Indicateurs de contour de polygônes David Odin () OpenGL Notions avancées Septembre 2007 22 / 25

ACTIVATION DES TABLEAUX On demande à OpenGL de gérer un tableau à l aide de la fonction suivante : void glenableclientstate (GLenum type); Le paramètre type indique quel tableau on désire activer, il peut prendre les valeurs suivantes : GL VERTEX ARRAY GL COLOR ARRAY GL NORMAL ARRAY GL TEXTURE COORD ARRAY GL INDEX ARRAY GL EDGE FLAG ARRAY David Odin () OpenGL Notions avancées Septembre 2007 23 / 25

CONTENU DES TABLEAUX Suivant le type de tableau, on indiquera où se trouve le contenu de ces tableaux à l aide de différentes fonctions : void glvertexpointer (GLint taille, GLenum type, GLsizei decalage, void debut); void glcolorpointer (GLint taille, GLenum type, GLsizei decalage, void debut); void glnormalpointer (GLenum type, GLsizei stride, void debut); void gltexcoordpointer (GLint taille, GLenum type, GLsizei decalage, void debut); void glindexpointer (GLint taille, GLenum type, GLsizei decalage, void debut); void gledgeflagpointer (GLsizei decalage, void debut); Pour chacune de ces fonctions, debut est un pointeur sur le premier élément du tableau, taille est le nombre de coordonnées (2 pour 2D, 3 pour 3D, 3 pour RGB, etc.), type est le type des données du tableau (GL FLOAT, GL INT, etc.) et decalage est le nombre d octets entre deux éléments, s il n y a pas de trou dans le tableau, on utilisera 0 pour decalage. David Odin () OpenGL Notions avancées Septembre 2007 24 / 25

UTILISATION DES TABLEAUX Maintenant que OpenGL sait quels tableaux il doit utiliser, on va pouvoir simplifier les appels entre glbegin() et glend(). Par exemple, si les tableaux des sommets, des couleurs et des textures sont activés, l appel glarrayelement(i); permettra de remplacer un appel à glcolor*, un appel à glnormal* et un appel à glvertex*. On peut aussi se passer du couple glbegin/glend si on dispose d un nouveau tableau contenant la liste des indices des éléments que l on veut à l aide de la fonction suivante : gldrawelements(glenum mode, GLSizei nombre, GLenum type, void tableau indices Mais si les éléments que l on veut dessiner sont consécutifs, on utilisera la fonction suivante : gldrawarrays(glenum mode, GLint premier, GLsizei nombre); David Odin () OpenGL Notions avancées Septembre 2007 25 / 25