Académique Documents
Professionnel Documents
Culture Documents
Cartes Graphiques 3D
Développement
Opérations
M2PRO-Images
Images Immersives - Rendu Temps Réel
J.C. Iehl
Plan
I Cartes graphiques 3D
I Opérations
I API 3D (DirectX / OpenGL)
I Pipeline graphique et shaders
I Utilisation Efficace
I Effets / Rendu multi-passes
Cartes graphiques 3D
Conséquences
1. description hiérarchique des repères de modélisation,
2. positionnement des objets devant la camera,
3. toutes ces transformations sont composées dans une seule
matrice MODELVIEW,
4. description de la projection par une matrice PROJECTION.
5. la notion de camera n’existe pas !
un driver
permet à la librairie de transmettre les données au matériel et de
réaliser l’affichage demandé par l’application,
du matériel spécialisé
réalise l’affichage le plus vite possible (G80 600M triangles /
seconde).
le contexte
permet de stocker l’ensemble des paramètres d’affichage.
la librairie / API 3D
I vérifie que l’application utilise correctement l’API,
I prépare les données et les paramètres pour simplifier leur
utilisation par le matériel.
le driver
I construit le contexte,
I transmet le contexte, les données et les commandes au
matériel.
Résumé
I afficher des polygones,
I rendu interactif !
I calculs génériques ?
OpenGL : Développement
Portabilité
I OpenGL est disponible plusieurs plateformes,
I utiliser des librairies ”annexes” disponibles sur les mêmes
plateformes,
I libSDL (images, textes, plugins, threads, réseaux, timers,
audio, joystick, évènements, etc.),
I OpenAL (audio 3D),
I ...
OpenGL : Développement
Jeux video
I affichage : OpenGL,
I audio : OpenAL,
I animations ?
I physique ?
I comportement ? intelligence artificielle (path finding, etc.) ?
I multi-joueurs ?
I chargement des données ?
DirectX : Développement
Portabilité
I non portable,
I DirectX Graphics + librairie utilitaire D3DX
DirectX : Développement
Jeux video
I affichage : DirectX Graphics,
I audio : DirectX Audio : DirectSound, X3DAudio,
I animations : D3DX (base)
I physique ?
I comportement ? intelligence artificielle (path finding, etc.) ?
I multi-joueurs ?
I chargement des données ?
Opérations
Initialisation
SDL : exemple
SDL_Init ( SDL_INIT_VIDEO ) ;
info = SD L_Ge tV id eoIn fo () ;
S D L _ G L _ S e t A t t r i b u t e ( SDL_GL_DEPTH_SIZE , 16) ;
S D L _ G L _ S e t A t t r i b u t e ( SDL_GL_DOUBLEBUFFER , 1) ;
screen = SD L_Se tVid eoMo de ( width , height , info - > vfmt - > BitsPerPixel ,
... SDL_OPENGL ) ;
Caméra
I position
I orientation
I projection 2D / orthographique, 3D / perspective, centrée, . . .
SDL : exemple
// s e l e c t i o n n e la matrice de v i s u a l i s a t i o n
glMatrixMode ( GL_PROJECTION ) ;
// r e i n i t i a l i s e les t r a n s f o r m a t i o n s
glLoadIdentity () ;
// definit une p r o j e c t i o n p e r s p e c t i v e
gluPerspective (50. , 1. , 1. , 1000.) ;
Lumière
Energie
I ambiente
I diffuse, spéculaire, réfléchissant (glossy / phong)
Type de source
I ponctuelle, directionnelle,
I spot, . . .
Forme
I placée et orienté devant la camera
I description par des primitives simples
Primitives
ou se trouve l’objet ?
Faces
Faces
I liste de sommets
I liste d’indices + liste de sommets partagés
I description sous forme de tableaux (sommets, sommets +
indices)
I stockage par l’application (conséquences ?)
I stockage sur la carte graphique (conséquences ?)
Primitives indexées
description indexée
I 8 positions + 24 indices
I 8*float[4] + 24*uint8
SDL : exemple
SDL : exemple
int frontIndices = {4 , 5 , 6 , 7};
int rightIndices = {1 , 2 , 6 , 5};
int bottomIndices = {0 , 1 , 5 , 4};
int backIndices = {0 , 3 , 2 , 1};
int leftIndices = {0 , 4 , 7 , 3};
int topIndices = {2 , 3 , 7 , 6};
Vertex
SDL : exemple
// active le tableau de p o s i t i o n s
g l E n a b l e C l i e n t S t a t e ( GL_VERTEX_ARRAY ) ;
glVertexPointe r (3 , GL_FLOAT , sizeof ( VERTEX ) , mesh - > vertices ) ;
Présentation
boucle d’affichage
I effacer les buffers utilisés (color, z-buffer, etc.)
I placer / orienter la caméra
I afficher les objets
I échanger les buffers de dessin et de présentation
SDL : exemple
// s e l e c t i o n n e la matrice de la scene
glMatrixMode ( GL_MODELVIEW ) ;
// r e i n i t i a l i s e les t r a n s f o r m a t i o n s
glLoadIdentity () ;
// desssine la scene
display ( ... ) ;
S D L _ G L _S w a p B u f f e r s () ;