introduction à la programmation 3d via opengldelroth.net/slides/gl-intro.pdf · afficher de la...

64
Afficher de la 3D, comment ça marche ? Présentation rapide de SDL Utilisation basique d’OpenGL Tour des fonctionnalités avancées Conclusion . . Introduction à la programmation 3D via OpenGL Pierre Bourdon LSE 19 octobre 2011 Pierre Bourdon 3D et OpenGL

Upload: dinhkhue

Post on 06-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.

......

Introduction à la programmation 3D viaOpenGL

Pierre Bourdon

LSE

19 octobre 2011

Pierre Bourdon 3D et OpenGL

Page 2: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Introduction

API permettant d’accèder à la carte graphiqueAndroid, iOS, Windows, Linux, Mac OS X, etc.Concurrent à Direct3D sous WindowsPyOpenGL, Tao OpenGL, GLCaml, etc.

Pierre Bourdon 3D et OpenGL

Page 3: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Exemples d’applications utilisant OpenGL

Pierre Bourdon 3D et OpenGL

Page 4: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Exemples d’applications utilisant OpenGL

Pierre Bourdon 3D et OpenGL

Page 5: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Exemples d’applications utilisant OpenGL

Pierre Bourdon 3D et OpenGL

Page 6: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Plan

...1 Afficher de la 3D, comment ça marche ?

...2 Présentation rapide de SDL

...3 Utilisation basique d’OpenGL

...4 Tour des fonctionnalités avancées

...5 Conclusion

Pierre Bourdon 3D et OpenGL

Page 7: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Scène 3D ?

Ensemble d’objets 3DEnsemble de vertices(x , y , z), couleur, coordonnées de texturesCoordonnées relatives à l’origine

Pierre Bourdon 3D et OpenGL

Page 8: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Transformations

Permettent de déplacer l’origine du repèreTrois types majeurs : translation, rotation, mise à l’échelleReprésentés par une matrice 4x4

Pierre Bourdon 3D et OpenGL

Page 9: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Maths

Matrice 4x4 = tableau de 16 nombresCoordonnées = matrice 4x1 = (x , y , z,1)Multiplication de matrice = magie

Pierre Bourdon 3D et OpenGL

Page 10: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Translation

Déplace l’origine du repère en (xo + Tx , yo + Ty , zo + Tz)

Pierre Bourdon 3D et OpenGL

Page 11: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Rotation

Tourne le repère d’un certain angle par rapport à un certain axe

Pierre Bourdon 3D et OpenGL

Page 12: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Mise à l’échelle

Change la taille des axes du repère

Pierre Bourdon 3D et OpenGL

Page 13: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Problème

On a une scène 3DOn a un écran 2DComment projeter la scène sur l’écran ?

Pierre Bourdon 3D et OpenGL

Page 14: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Projection

Plusieurs moyens de projeterParallèleEn perspective

Pierre Bourdon 3D et OpenGL

Page 15: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Projection parallèle

Paramètres : left, right, bottom, top, near, farDécrit un parallélépipède

Pierre Bourdon 3D et OpenGL

Page 16: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Projection en perspective

Paramètres : FOV, aspect ratio, near, far

Pierre Bourdon 3D et OpenGL

Page 17: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Problème

On affiche un rectangle avec profondeur 0On affiche un rectangle avec profondeur 1 (derrière)

Pierre Bourdon 3D et OpenGL

Page 18: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Problème

Pierre Bourdon 3D et OpenGL

Page 19: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Solutions

Algorithme du peintreZ-buffer

Pierre Bourdon 3D et OpenGL

Page 20: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Algorithme du peintre

On trie par profondeur décroissanteOn affiche de l’arrière à l’avantTrier demande de connaitre toutes les facesProblème en cas d’intersectionPeu utilisé à cause de ces problèmes

Pierre Bourdon 3D et OpenGL

Page 21: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Z-buffer

if depth < zbuffer[x, y]:zbuffer[x, y] = depthimage[x, y] = color

else:# drop

Grand tableau qui contient la profondeurDepth testSolution utilisée par presque tout le monde

Pierre Bourdon 3D et OpenGL

Page 22: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Représentation

4 composantes : RGBAChaque composante entre 0 et 255 ou 0.0 et 1.0

Pierre Bourdon 3D et OpenGL

Page 23: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Canal alpha

Sert à représenter la transparenceGénéralement 1.0 = opaque, 0.0 = transparent

Pierre Bourdon 3D et OpenGL

Page 24: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Interpolation

Pierre Bourdon 3D et OpenGL

Page 25: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. C’est quoi ?

Une imageAppliquée sur les faces d’un objet 3D

Pierre Bourdon 3D et OpenGL

Page 26: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Exemple

Pierre Bourdon 3D et OpenGL

Page 27: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Coordonnées de texture

Pierre Bourdon 3D et OpenGL

Page 28: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Coordonnées de texture

Sert à définir quel bout de la texture est sur quelle facePropriété d’un vertex

Pierre Bourdon 3D et OpenGL

Page 29: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Définition de la 3D3D -> 2DProfondeur et ordre de renduCouleursTextures

.. Exemple

Pierre Bourdon 3D et OpenGL

Page 30: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Pourquoi ?

OpenGL ne gère que l’affichagePas de fenêtragePas d’événementsPas de son

Pierre Bourdon 3D et OpenGL

Page 31: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. SDL

Simple DirectMedia LayerCrée une fenêtreClavier/souris/joystickSon, musique avec SDL_mixerImages avec SDL_imagePygame, TaoSDL, OCamlSDL, etc.

Pierre Bourdon 3D et OpenGL

Page 32: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Initialisation de SDL

#include <SDL/SDL.h>#include <stdlib.h>

int main(void){

SDL_Init(SDL_INIT_EVERYTHING);atexit(SDL_Quit);

/* ... */

return 0;}

Pierre Bourdon 3D et OpenGL

Page 33: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Création d’une fenêtre

SDL_SetVideoMode(800, /* width */600, /* height */0, /* bpp, 0 = auto */SDL_OPENGL); /* flags */

Pierre Bourdon 3D et OpenGL

Page 34: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Création d’une fenêtre fullscreen

SDL_SetVideoMode(800, /* width */600, /* height */0, /* bpp, 0 = auto */SDL_OPENGL | SDL_FULLSCREEN); /* flags */

Pierre Bourdon 3D et OpenGL

Page 35: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Boucle principale

while (!quit){

handle_events();update_game_state();display_with_gl();

SDL_GL_SwapBuffers();}

Pierre Bourdon 3D et OpenGL

Page 36: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Gestion des événements

SDL_Event evt;while (SDL_PollEvent(&evt)){

if (evt.type == SDL_KEYDOWN) /* ... */else if (evt.type == SDL_MOUSEMOTION) /* ... */else if (evt.type == SDL_MOUSEBUTTONDOWN) /* ... */else if (evt.type == SDL_QUIT) /* ... */

}

Pierre Bourdon 3D et OpenGL

Page 37: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. ... et c’est tout !

On n’ira pas plus loinTonnes de tutoriels en ligneC’est une conférence OpenGL FFS !

Pierre Bourdon 3D et OpenGL

Page 38: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Initialisation

glClear(GL_COLOR_BUFFER_BIT);/* ou */glClear(GL_DEPTH_BUFFER_BIT);

Pierre Bourdon 3D et OpenGL

Page 39: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Afficher un triangle en 2D

glBegin(GL_TRIANGLES);glVertex2f(0.0, 0.0);glVertex2f(1.0, 0.0);glVertex2f(0.5, 1.0);

glEnd();

Pierre Bourdon 3D et OpenGL

Page 40: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Afficher un carré en 2D

glBegin(GL_TRIANGLES);glVertex2f(0.0, 0.0); glVertex2f(0.0, 1.0);

glVertex2f(1.0, 0.0);

glVertex2f(1.0, 1.0); glVertex2f(0.0, 1.0);glVertex2f(1.0, 0.0);

glEnd();

glBegin(GL_QUADS);glVertex2f(0.0, 0.0);glVertex2f(1.0, 0.0);glVertex2f(1.0, 1.0);glVertex2f(0.0, 1.0);

glEnd();

Pierre Bourdon 3D et OpenGL

Page 41: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Donner une couleur

glColor4ub(255, 0, 0, 255); /* r, g, b, a */glVertex2f(0.0, 0.0);

glColor4f(0.0, 1.0, 0.0, 1.0);glVertex2f(0.0, 1.0);

Pierre Bourdon 3D et OpenGL

Page 42: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. 3D ?

Même chose mais avec 3f au lieu de 2fglEnable(GL_DEPTH_TEST) pour avoir un zbufferPour avoir un résultat correct -> projection

Pierre Bourdon 3D et OpenGL

Page 43: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Types de matrices

glMatrixModeMatrice de projection (GL_PROJECTION)Matrice de modèle (GL_MODELVIEW)Autres types dont on ne parlera pas

Pierre Bourdon 3D et OpenGL

Page 44: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Pile de matrices

glPushMatrix / glPopMatrixPermet de facilement annuler une transformation

Pierre Bourdon 3D et OpenGL

Page 45: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Mise en place de la projection

glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(70, /* fov */

(float)width / height, /* aspect ratio */0.1, /* near */10000.0); /* far */

Pierre Bourdon 3D et OpenGL

Page 46: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Mise en place de la projection

glMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-10.0, 10.0, /* xmin, xmax */

-10.0, 10.0, /* ymin, ymax */-10.0, 10.0); /* zmin, zmax */

Pierre Bourdon 3D et OpenGL

Page 47: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Transformations

glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslate3f(1.0, 0.0, 1.0);glScale3f(1.0, 2.0, 1.5);glRotatef(45, 1.0, 0.0, 0.0);

Pierre Bourdon 3D et OpenGL

Page 48: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. glEnable / glDisable

Plein de choses optionnellesglEnable activeglDisable désactiveglIsEnabled -> actif ou pas

Pierre Bourdon 3D et OpenGL

Page 49: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Exemples de paramètres

GL_DEPTH_TEST : zbufferGL_TEXTURE_2D : texturesGL_LIGHTING : éclairageGL_BLEND : gère la transparence

Pierre Bourdon 3D et OpenGL

Page 50: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Paramètres plus spécifiques

glBlend(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)glDepthFunc(GL_LEQUAL)...

Pierre Bourdon 3D et OpenGL

Page 51: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Comment ça marche ?

On demande à OpenGL de nous générer une textureOn lui envoie l’image correspondanteEnsuite, avant d’afficher, on bind la texture

Pierre Bourdon 3D et OpenGL

Page 52: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Différents formats

RGBARGB sans alphaGreyscaleTextures compressées

Pierre Bourdon 3D et OpenGL

Page 53: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. En code : génération

int tex_id;glGenTextures(1, &tex_id);

/* envoyer l’image */

Pierre Bourdon 3D et OpenGL

Page 54: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. En code : afficher avec une texture

glBindTexture(GL_TEXTURE_2D, tex_id);glBegin(GL_QUADS);

glTexCoord2f(0.0, 0.0); glVertex2f(0.0, 0.0);glTexCoord2f(1.0, 0.0); glVertex2f(1.0, 0.0);glTexCoord2f(1.0, 1.0); glVertex2f(1.0, 1.0);glTexCoord2f(0.0, 1.0); glVertex2f(0.0, 1.0);

glEnd();

Pierre Bourdon 3D et OpenGL

Page 55: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. Charger une texture

C’est compliquéPlein de tutos sur le netDépend du format d’imageRegardez du côté de SOIL

Pierre Bourdon 3D et OpenGL

Page 56: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Dessin basiqueTransformationsConfigurationTextures

.. free()

glDeleteTextures(1, &tex_id);

Pierre Bourdon 3D et OpenGL

Page 57: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Display lists

Enregistre une liste de commande GLPermet d’appeller toute la liste en une foisCommandes limitées (pas de bind)Simple et plutôt efficace

Pierre Bourdon 3D et OpenGL

Page 58: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Vertex Array Object

Tableau de verticesAu lieu d’envoyer un par un, on envoie le tableau entierBeaucoup plus rapideVertices renvoyés à la carte graphique à chaque rendu

Pierre Bourdon 3D et OpenGL

Page 59: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Vertex Buffer Object

Tableau de vertices aussiContrairement aux VAO, on contrôle l’envoi à la cartegraphiqueTrès utile pour des géométries statiques

Pierre Bourdon 3D et OpenGL

Page 60: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Index Buffer Object

Permet d’éviter de dupliquer les verticesRéférence les vertices par un numéroTrès utile en combinaison avec les VBO et VAO

Pierre Bourdon 3D et OpenGL

Page 61: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Frame Buffer Object

Récupère le rendu OpenGL dans une texturePermet de faire des effets comme des portails ou desmiroirsTrès facile à mettre en placeRalentit pas mal le rendu

Pierre Bourdon 3D et OpenGL

Page 62: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Vertex shader

Permet de faire tourner du code pour chaque vertex traitéModifier couleur, profondeur, coordonnées de textures, etc.Se programme en GLSLExtrémement utile, extrémement utilisé

Pierre Bourdon 3D et OpenGL

Page 63: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

Optimisation du renduContrôle sur le rendu

.. Fragment shader

Aussi appellé Pixel ShaderPermet de faire tourner du code pour chaque pixel traitéModifier couleur, profondeur, etc.Se programme aussi en GLSLPratiquement tous les effets modernes passent par là

Pierre Bourdon 3D et OpenGL

Page 64: Introduction à la programmation 3D via OpenGLdelroth.net/slides/gl-intro.pdf · Afficher de la 3D, comment ça marche? Présentation rapide de SDL Utilisation basique d’OpenGL

Afficher de la 3D, comment ça marche ?Présentation rapide de SDL

Utilisation basique d’OpenGLTour des fonctionnalités avancées

Conclusion

.. Des questions ?

Merci de votre attention !#epita @ irc.rezosup.org

Pierre Bourdon 3D et OpenGL