Intro OpenGL

download Intro OpenGL

of 110

  • date post

    07-Apr-2015
  • Category

    Documents

  • view

    186
  • download

    0

Embed Size (px)

Transcript of Intro OpenGL

Programacin 3D con OpenGL bajo GNU/LinuxRoberto Garrido Martn (Ro) e-ghost ESIDE's GNU Hi-tech and Open Source Team

ndice1. Introduccin 2. OpenGL y GNU/Linux 3. Conceptos bsicos sobre OpenGL 4. Animaciones 5. Iluminacin 6. Texturas 7. Interaccin con el tecladoRoberto Garrido (Ro) - ESIDE e-ghost 2006

IntroduccinObjetivo del cursillo A quin va dirigido? Recursos del cursillo

Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

La librera OpenGL

Estndar creado por Silicon Graphics en 1992 Versin 2.0

Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

La librera OpenGL

Tres partes funcionales

La librera OpenGL La librera GLU GLX Adems, GLUT

Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

GNU/Linux y OpenGL

La librera Mesa

Es Libre Es una implementacin software, excepto para ciertas tarjetas, que usan el driver Mesa/Glide:

Voodoo1, Voodoo2, Voodoo Rush, Voodoo Banshee, Voodoo3

Versin 6.5, que implementa OpenGL 1.5 (la implementacin de especificacin 2.0 est en camino)

Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

GNU/Linux y OpenGL

Xlibmesa

Proporciona acceso a la aceleracin grfica por hardware, a travs de DRI y si la tarjeta lo permite

Este modo de acceso es usado por tarjetas 3dfx, Intel, Matrox, ATI

DRI est presente en las implementaciones del servidor Xfree86 a partir de la versin 4, y hoy en las de Xorg

Tarjetas NVIDIA, con su propia implementacin de la librera OpenGL

Se usa conjuntamente con Mesa (GLU)Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

GNU/Linux y OpenGL(en resumen):

Roberto Garrido (Ro) - ESIDE e-ghost 2006

OpenGL y GNU/Linux

Qu necesitamos para programar con OpenGL bajo GNU/Linux?

Binarios de la librera OpenGL (Mesa, xlibmesa, o drivers propietarios) Paquetes de desarrollo de estas libreras (cdigo fuente de Mesa, xlibmesa-dev, para drivers propietarios, depende (nvidia-glx-dev)) Compilador de C/C++ (gcc, g++) Editor de texto (kate, gedit, vim, nano, ...)Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

OpenGL como mquina de estados

Activar y desactivar opciones y realizar acciones, que tendrn como objetivo una representacin en pantalla No es lo mismo dibujar un tringulo y activar una textura, que activar una textura y dibujar un tringulo Rotar y transladar algo, es distinto que transladarlo y rotarlo

El orden en OpenGL es crtico en la mayora de los casosRoberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

OpenGL como mquina de estados

En general, para dibujar un objeto:1 Activar opciones persistentes a la escena (luces, posicionar cmara) 2 Activar las opciones de un objeto especfico (su posicin, textura) 3 Dibujar el objeto 4 Desactivar las opciones del objeto (volver a la posicin anterior, desactivar su textura) 5 Y volver al punto 2 hasta haber dibujado todos los objetos (siguiendo una jerarqua)Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Y

Cuatro dimensiones (x,y,z,w)X Z

Sistema de coordenadas inicial1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Transformaciones de objetos

Translacin

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Transformaciones de objetos

Rotacin

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Transformaciones de objetos

Escalado

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Transformaciones de objetos

Toda transformacin construye una matriz de cuatro dimensiones que se multiplicar por la matriz de transformacin actual Al transladar un objeto 3 unidades en el eje X:1003 0100 0010 0001

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

El espacio 3D

Transformaciones de objetos

Si aplicamos dicha transformacin a la transformacin inicial, obtenemos:1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1003 0100 0010 0001 1003 0100 0010 0001

Si ahora dibujamos el punto (1,0,0), quedar desplazado, de la siguiente forma:1003 0100 0010 0001 1 4 0 0 0 Roberto Garrido (Ro) - ESIDE 0 e-ghost 2006 1 1

Conceptos bsicos sobre OpenGL

El espacio 3D

Las coordenadas homogneas

Varias razones:

Uniformidad de operaciones con matrices Conceptos relativos a profundidad El punto 3D (1, 2, 3) es traducido a (1, 2, 3, 1.0) El punto 2D (1, 2) es traducido a (1, 2, 0.0, 1.0) En general, el punto (x,y,z,w) en coordenadas homogneas es equivalente al punto 3D (x/w,y/w,z/w)

Son cuatro coordenadas, de forma que:

Si w=0, punto en el infinito con direccin (x,y,z)Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Sobre Glut

Funciones para la creacin de ventanas independiente de plataforma Lo veremos en los ejemplos Funciones de callback Activacin/Desactivacin de opciones

Las funciones bsicas de OpenGL

glEnable(), glDisable()

glEnable(GL_LIGHTING)Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de OpenGL

Las matrices y OpenGL

Transformacin de objetos: matriz de visualizacin/modelado Matriz de proyeccin: informacin de la cmara Cambiar modo de matriz:

glMatrixMode(GL_PROJECTION) glMatrixMode(GL_MODELVIEW) glPopMatrix() y glPushMatrix()

Guardar y restaurar valores en la pila

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de OpenGL

Las matrices y OpenGL

Para dibujar jerarquas de objetos

glPushMatrix(); glPopMatrix(); // Volvemos a la transformacin comn glPushMatrix(); glPopMatrix(); // Volvemos a la transformacin comn ...

glLoadIdentity() carga la matriz unidadRoberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

El dibujado en OpenGL

Para dibujar en OpenGL:

Habilitar modo de dibujado Establecer opciones de dibujado de cada vrtice Dibujar cada vrtice Finalizar el modo de dibujado

glBegin()

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGLParmetro GL_POINTS GL_LINES GL_POLYGON GL_TRIANGLES GL_QUADS Descripcin Se dibujan vrtices separados Cada par de vrtices se interpreta como una lnea Los vrtices describen el contorno de un polgono Cada triplete de vrtices de interpreta como un tringulo Cada cuarteto de vrtices se interpreta como un cuadriltero GL_LINE_STRIP Lneas conectadas GL_LINE_LOOP Lneas conectadas, con unin entre el primer y ltimo vrtice GL_TRIANGLE_STRIP Se dibuja un tringulo, y cada nuevo vrtice se interpreta con un tringulo entre los dos anteriores vrtices y el nuevo GL_TRIANGLE_FAN Se dibujan tringulos con un vrtice comn GL_QUAD_STRIP Igual que el TRIANGLE_STRIP, con cuadrilteros

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

El dibujado en OpenGL

Establecer atributos de cada vrtice:

Color: glColor* Normal: glNormal* Coordenadas de textura: glTexCoor* glVertex*

Dibujado de vrtices:

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

El color en OpenGL

Modos RGBA e Indexado Cara delantera: orden antihorario1 2

La orientacin de las caras en OpenGL

3

4

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

Las transformaciones en OpenGL

Operaciones que permiten situar objetos en el espacio:

glTranslate*: transladar un objeto en el espacio glRotate*: rotar un objeto glScale*: escalar un objeto glMultMatrix: multiplicar la matriz actual por una dada

NO es lo mismo rotar y luego transladar, que transladar y luego rotar

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

La proyeccin en OpenGL

Cmo afecta la posicin de un objeto a su visualizacin Proyeccin ortogrfica

glOrtho(Xmin, Xmax, Ymin, Ymax, Znear, Zfar);

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Las funciones bsicas de Opengl

La proyeccin en OpenGL

Proyeccin perspectiva gluPerspective()

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Primer contacto con OpenGL ;)

Mi primer programa en OpenGL

Includes#include

Funcin main

int main(int argc, char * argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(20,20); glutInitWindowSize(500,500); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutMainLoop(); return 0;

}

Roberto Garrido (Ro) - ESIDE e-ghost 2006

Conceptos bsicos sobre OpenGL

Mi primer programa en OpenGL

Funcin display

void display(void) { glClearColor(0.0,0.0,0.0,0.0); // Color de fondo: negro glClear(GL_COLOR_BUFFER_BIT); // Boramos la pantalla glMatrixMode(GL_PROJECTION); // Modo proyeccin glLoadIdentity(); // Cargamos la matriz identidad glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0); // Proyeccin ortogrfica, dentro del cubo sealado glMatri