Visualisation avec OpenGL - PowerPoint PPT Presentation

About This Presentation
Title:

Visualisation avec OpenGL

Description:

J r mie Allard. 4 Novembre 2002. 2. Plan. Pr sentation. Exemple. Transformations. Objets ... 1992: Cr ation du standard OpenGL, Open Graphic Library, control par ... – PowerPoint PPT presentation

Number of Views:82
Avg rating:3.0/5.0
Slides: 31
Provided by: Hufo
Category:

less

Transcript and Presenter's Notes

Title: Visualisation avec OpenGL


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ésentationHistorique
  • 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, EvansSutherland, HP,
    IBM, Intel, Matrox, Microsoft, nVIDIA, SGI, Sun
  • Spécification actuelle OpenGL 1.4
  • Futur OpenGL 2.0

4
PrésentationStructure
  • 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ésentationConcepts
  • 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ésentationConcepts (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
ExempleStructure
  • 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
ExempleAfficher un triangle
  • // render_triangle.c
  • include ltGL/gl.hgt
  • void render()
  • glClear(GL_COLOR_BUFFER_BITGL_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 ltGL/glut.hgt
  • void init()
  • void display()
  • void idle()
  • int main(int argc, char argv)
  • glutInit(argc, argv)
  • glutInitDisplayMode(GLUT_RGBAGLUT_DOUBLE)
  • glutCreateWindow(argv0)
  • 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.3333, 1.0, 5000.0)
  • glMatrixMode(GL_MODELVIEW)
  • glLoadIdentity()
  • void display() // calcule et affiche une image
  • render()
  • glutSwapBuffers()
  • void idle() // reaffiche une fois terminé
  • glutPostRedisplay()

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

12
ExemplesNotes
  • 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 -gt 2D
  • Les 2 premières transformations sont stockées
    dans la matrice MODELVIEW
  • La projection est stockée dans la matrice
    PROJECTION

14
TransformationsPiles 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
TransformationsProjection
  • 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
  • glTranslated/f(x,y,z) déplace l'objet du
    vecteur spécifié
  • Ex glTranslatef(0.0f, 0.0f, -6.0f)
  • glRotated,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)
  • glScaled/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
TransformationsExemple
  • // render_rotate.c
  • include ltGL/gl.hgt
  • int nbframe0
  • 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
TransformationsNotes
  • 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
ObjetsPrimitives
  • glBegin(type)

21
ObjetsExemple 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
ObjetsExemple 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 PhongC 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èresExemple
  • 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èresExemple (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
TexturesExemple
  • 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
TexturesExemple (2)
29
Techniques Avancées
30
Références
  • OpenGL Programming Guide (The Red Book)
  • http//ask.ii.uib.no/ebt-bin/nph-dweb/dynaweb/SGI
    _Developer/OpenGL_PG/
  • OpenGL Reference Manual (The Blue Book)
  • http//ask.ii.uib.no/ebt-bin/nph-dweb/dynaweb/SGI
    _Developer/OpenGL_RM/
  • http//www.opengl.org site officiel. Forums
  • http//nehe.gamedev.net le site de tutoriels
    OpenGL
  • http//hufo.planet-d.net mon site -) (demos)
Write a Comment
User Comments (0)
About PowerShow.com