1 Visualisation avec OpenGL Jérémie Allard 4 Novembre 2002.

Slides:



Advertisements
Présentations similaires
Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
Advertisements

Produit Gammes Nomenclatures Modules Techniques Prix de Revient Prix de Vente Modules Techniques Client Marges Mise en route Temps Unitaire Prix (Ex:
Z y x Repère des objets (repère de modélisation) x z y Repère du monde.
( Application Programming Interface)
Chaîne de Synthèse Réel Modélisation Rendu Image Fichier Scène
Tous droits réservés. Reproduction intégrale ou partielle interdite sans autorisation écrite de la partdu titulaire des droits dauteur. Institut de Formation.
Augmented Reality Toolkit
ACTIVITES Les fractions (10).
Les Prepositions.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Réalité virtuelle et interactions avec un individu
Programmation des logiciels infographiques interactifs 2D et 3D, et le OpenGL.
Page 1 Introduction à ATEasy 3.0 Page 2 Quest ce quATEasy 3.0? n Ensemble de développement très simple demploi n Conçu pour développer des bancs de test.
Présentation générale de MapBruit
Classification Multi Source En Intégrant La Texture
Programmation graphique
GRAPHISME PAR ORDINATEUR
IFT3730: Infographie 3D Transformations Géométriques
1 Transformations affines But: fixer le positionnement et lorientation des objets de la scène.
Transformations de visualisation en OpenGL
SUJETS SPÉCIAUX EN INFORMATIQUE I PIF Contenu du cours Transformations géométriques des objets –Transformations 2D –Transformations entre systèmes.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Gestion des événements liés à la fenêtre et aux périphériques dentrée.
Développement d’application web
2 TP avec l ’aide d ’un modeleur 3D :
Modélisation géométrique à l’aide d’un maillage
Ombres en temps-réel Nicolas Holzschuch Cours dOption Majeure 2
Projet Génie Logiciel & UML, Bases de Données & Interfaces
Images synthètiques de haute qualité
Notre calendrier français MARS 2014
IFT3730 : Infographie 3D Systèmes et modèles graphiques Pierre Poulin, Derek Nowrouzezahrai Hiver 2013 DIRO, Université de Montréal.
IFT2740 : Outils de l'infographie 3D Systèmes et modèles graphiques
IFT3730 : Infographie 3D Plan de cours
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
C'est pour bientôt.....
Charte graphique Réunion de lancement Novembre 2008 Novembre 2008
Veuillez trouver ci-joint
Application de texture en OpenGL
2.2 PRODUIT SCALAIRE ET CALCUL D’ANGLES
Découpage des objets selon le volume de vue
Techniques de points de contrôle en OpenGL : formes de Bézier
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
Représentation et traitement des images en OpenGL
PROTOTYPE D’UN PROGRAMME ÉCRIT EN C++ BASÉ SUR OPENGL
Éclairage en OpenGL.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
Listes d’affichage.
Structures des données
‘‘Open Data base Connectivity‘‘
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Biologie – Biochimie - Chimie
CALENDRIER-PLAYBOY 2020.
Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1.
LES PILES ET FILES.
Synthèse d’images 2. illumination
KF-RAY Raytracer parallèle Projet long d’informatique
GRAPHISME PAR ORDINATEUR
OpenGL Shading Language Introduction. But de ce cours  Non-buts  Spécialistes GLSL  Experts en GLSL  Exploration du pipeline graphique  Séparation.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 10 Textures –Définir la texture –Superposition d’une texture sur une surface plane –Superposition.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 6 Transformation et animation de plusieurs modèles 3D avec XNA –Chargement des modèles 3D (modèle.
GRAPHISME PAR ORDINATEUR SIF Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante.
Diagramme de Gantt. Groupe Core Module de vecteur de ℝ ² utilisé pour représenter toutes les coordonnées et leur appliquer des transformations. Ré-implémentation.
Architecture et Fonctionnement d’un GPU Géométrie Rendu.
Introduction à la programmation graphique
GRAPHISME PAR ORDINATEUR
Éclairage, ombrage Fiat lux !.
Introduction aux technologies du jeux-vidéo Steve Gury
Transcription de la présentation:

1 Visualisation avec OpenGL Jérémie Allard 4 Novembre 2002

2 Plan Présentation Exemple Transformations Objets Matériaux et Lumières Textures Techniques Avancées

3 Présentation: Historique Avant 1992: IRIS GL développé par SGI. 1992: Création du standard OpenGL, Open Graphic Library, controlé par l ARB, Architecture Review Board. –3DLabs, Apple, ATI, Dell, Evans&Sutherland, HP, IBM, Intel, Matrox, Microsoft, nVIDIA, SGI, Sun Spécification actuelle: OpenGL 1.4 Futur: OpenGL 2.0

4 Présentation: Structure API bas niveau Langage C Plusieurs composants: –GL : librairie graphique, indépendante du système –GLU : fonctions utilitaires (objects prédéfinis, courbes) –GLX / WGL /... : interface avec le système (GLX sous X/Windows, WGL sous Win32). –GLUT (facultatif) : Toolkit dabstraction du système

5 Présentation: Concepts Framebuffer: buffer contenant limage affichée sur lécran. Utilise le Double-Buffering: –Front buffer: image actuellement affichée –Back buffer: image en cours de calcul Plusieurs composantes: –Color Buffer: Couleurs de limage (composante R G B) –Z Buffer: Distances (calcul des parties cachées –Stencil Buffer, Alpha Buffer, Accumulation Buffer

6 Présentation: Concepts (2) Pixel: point dune image Vertex: sommet dun objet. Possède une position 3D et des attributs facultatifs: –Normal: vecteur normal à la surface –Color: couleur (et transparence) –TexCoord: coordonnée de mapping de la texture Polygone: primitive d affichage. Liste de n points (généralement des triangles). Objet: ensemble de polygones

7 Exemple: Structure La structure dun programme OpenGL est généralement: –Initialisation –Boucle principale: Mise a jour des données Calcul de limage (render) Affichage de la nouvelle image (swap) Le code dépend du système utilisé (X/Windows, Win32, GLUT, VR Juggler)

8 Exemple: Afficher un triangle // render_triangle.c #include void render() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); // couleur V1 glVertex3f( 0.0f, 1.0f,-3.0f); // position V1 glColor3f(0.0f,1.0f,0.0f); // couleur V2 glVertex3f(-1.0f,-1.0f,-3.0f); // position V2 glColor3f(0.0f,0.0f,1.0f); // couleur V3 glVertex3f( 1.0f,-1.0f,-3.0f); // position V3 glEnd(); // GL_TRIANGLES }

9 Exemple: Programme principal avec GLUT (1) // main_glut.c #include void init(); void display(); void idle(); int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutIdleFunc(idle); glutMainLoop(); }

10 Exemple: Programme principal avec GLUT (2) void init() { // initialise la caméra glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60, , 1.0, ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void display() { // calcule et affiche une image render(); glutSwapBuffers(); } void idle() { // reaffiche une fois terminé glutPostRedisplay(); }

11 Exemple: Compilation avec GLUT Compilation: gcc -o triangle main_glut.c render_triangle.c -lglut - lGLU -lGL -lXmu -lXext -lX11 -lm Résultat:

12 Exemples: Notes Je conseille de séparer le programme principal dépendant du système et les fonctions de lapplication elle-même –portabilité sur dautres systèmes (comme Net Juggler). Le triangle a été spécifié en immediate mode : les vertice sont spécifiés un par un Convention: beaucoup de fonctions OpenGL utilisent un suffixe pour spécifier le nombre et le type darguments –f pour float, d pour double, i pour int

13 Transformations Chaque vertex subit des transformations avant dêtre affiché. –Position et orientation de lobjet dans la scène –Inverse de la position et lorientation de la caméra –Projection 3D -> 2D Les 2 premières transformations sont stockées dans la matrice MODELVIEW La projection est stockée dans la matrice PROJECTION

14 Transformations: Piles de matrices La matrice de travaille est spécifiée par la commande glMatrixMode : –glMatrixMode(GL_PROJECTION) –glMatrixMode(GL_MODELVIEW) OpenGL stocke pour chacune une pile de matrices –glPushMatrix() sauvegarde la matrice courante –glPopMatrix() restaure une matrice précédente

15 Transformations: Projection glLoadIdenty() réinitialise la matrice courante. La projection est spécifiée par la commande gluPerspective(fovy, aspect, zNear, zFar): –fovy: angle de vision horizontal –aspect: aspect ratio de la fenêtre (1.333 pour un ecran) –zNear: distance z minimale –zFar: distance z maximale

16 Transformations: Trans- lation, Rotation, Scaling glTranslate[d/f](x,y,z) déplace l'objet du vecteur spécifié –Ex: glTranslatef(0.0f, 0.0f, -6.0f); glRotate[d,f](angle,x,y,z) tourne l'objet autour de laxe spécifié (angle en degré) –Ex: glRotatef(90.0f, 0.0f, 1.0f, 0.0f); glScale[d/f](x,y,z) étire l'objet selon les facteurs spécifié pour chacun des axes –Ex: glScalef(2.0f, 2.0f, 2.0f);

17 Transformations: Exemple // render_rotate.c #include int nbframe=0; void render() { glClear(…); // comme Exemple 1 glPushMatrix(); glTranslatef(0,0,-3); glRotatef(nbframe,0,1,0); glBegin(GL_TRIANGLES); … // comme Exemple 1 glEnd(); // GL_TRIANGLES glPopMatrix(); ++nbframe; }

18 Transformations: Notes Si aucune transformation nest spécifiée, l axe X est dirigé vers la droite, laxe Y vers le haut, laxe Z vers lavant, et la caméra est en (0,0,0) Lordre des transformations est très important. Les transformations spécifiées en derniers sappliquent en premier. –Inversion de la translation et la rotation:

19 Objets Un objet est un ensemble de polygones. Plusieurs façons de spécifier un objet: –immediate mode: spécification directe. Très simple. glBegin(type); … glVertex … glEnd(); –vertex array: utilisation dun tableau stockant les vertices. Plus efficace, mais plus compliqué –display list: regroupements de commandes en «batch». Anciennement le plus rapide mais trop limité. –Il existe beaucoup doptimisations dépendantes de la carte graphique (placer les données dans la mémoire vidéo pour les cartes nVIDIA).

20 Objets: Primitives glBegin(type) :

21 Objets: Exemple procédural void renderAxeX() { glBegin(GL_QUADS); // base glVertex3f(0,-0.1f,-0.1f); glVertex3f(0, 0.1f,-0.1f); glVertex3f(0, 0.1f, 0.1f); glVertex3f(0,-0.1f, 0.1f); glEnd(); glBegin(GL_TRIANGLE_FAN); // cotés glVertex3f(1,0,0); glVertex3f(0,-0.1f,-0.1f); glVertex3f(0, 0.1f,-0.1f); glVertex3f(0, 0.1f, 0.1f); glVertex3f(0,-0.1f, 0.1f); glVertex3f(0,-0.1f,-0.1f); glEnd(); }

22 Objets: Exemple procédural (2) void render() { glEnable(GL_DEPTH_TEST); glPushMatrix(); glTranslatef(0,-1,-3); glRotatef(nbframe,0,1,0); glClear(…); glColor3f(1,0,0); renderAxeX(); // axe X glRotatef(90,0,0,1); glColor3f(0,1,0); renderAxeX(); // axe Y glRotatef(90,0,-1,0); glColor3f(0,0,1); renderAxeX(); // axe Z glPopMatrix(); ++nbframe; }

23 Matériaux et Lumières OpenGL supporte le model de lumière Phong: C = Ca + Cd.(N.L) + Cs.(N.K) shininess –C : couleur finale –Ca : couleur ambiante –Cd : couleur diffuse –Cs : couleur specular –N : vecteur normal de la surface –L : vecteur unitaire reliant le vertex a la lumiere –K : 1/2 vecteur (vecteur au milieu de L et du vecteur reliant la vertex a la caméra). –Shininess: puissance du spécular

24 Matériaux et Lumières: Exemple … glPushMatrix(); glRotatef(nbframe,1,0,0); glRotatef(nbframe/2,0,0,1); GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glPopMatrix(); GLUquadricObj* sph = gluNewQuadric (); gluQuadricOrientation(sph, GLU_OUTSIDE); gluSphere(sph, 1, 32,32); gluDeleteQuadric(sph); …

25 Matériaux et Lumières: Exemple (2)

26 Textures Une texture est une image pouvant être appliqué a un objet (en général pour spécifier une couleur). Elle est en général charger a partir dun fichier. De nombreux codes existent sur internet pour différents formats. A chaque vertex il faut spécifier les coordonnées de mapping (2 composantes u et v) spécifiant le point de la texture appliqué sur ce vertex.

27 Textures: Exemple #include "tga.h" unsigned int textureID = 0; void initgl() { glGenTextures(1, &textureID); // crée un ID loadTGA("logo_id.tga",textureID); // chage la texture } void render() { … glBindTexture(GL_TEXTURE_2D, textureID); glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glColor3f(1.0f,1.0f,1.0f); glTexCoord2f(1,1); glVertex3f( 1.0f, 1.0f, 0.0f); glColor3f(1.0f,0.0f,0.0f); glTexCoord2f(0,1); glVertex3f(-1.0f, 1.0f, 0.0f); glColor3f(0.0f,1.0f,0.0f); glTexCoord2f(0,0); glVertex3f(-1.0f,-1.0f,0.0f); glColor3f(0.0f,0.0f,1.0f); glTexCoord2f(1,0); glVertex3f( 1.0f,-1.0f,0.0f); glEnd(); … }

28 Textures: Exemple (2)

29 Techniques Avancées

30 Références OpenGL Programming Guide (The Red Book) OpenGL Reference Manual (The Blue Book) : site officiel. Forums : le site de tutoriels OpenGL : mon site :-) (demos)