1 intro opengl visualización computacional 2. 2 ¿qué es opengl? opengl es una biblioteca para el...

56
1 Intro OpenGL Intro OpenGL Visualización Computacional 2 Visualización Computacional 2

Upload: cebrian-monica

Post on 28-Jan-2016

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

11

Intro OpenGLIntro OpenGL

Visualización Computacional 2Visualización Computacional 2

Page 2: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

22

¿Qué es OpenGL?¿Qué es OpenGL?

OpenGL es una biblioteca para el desarrollo de OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma gráficos por computadora en 2D y 3D multiplataforma (Linux, Windows, Unix, MacOS, PS3)(Linux, Windows, Unix, MacOS, PS3)

Su nombre proviene de Open Graphics LibrarySu nombre proviene de Open Graphics Library

Es una especificación que define una API Es una especificación que define una API (del inglés (del inglés Application Programming Interface - Interfaz de Application Programming Interface - Interfaz de Programación de Aplicaciones) para la programación Programación de Aplicaciones) para la programación de gráficos en varios lenguajesde gráficos en varios lenguajes

Nota: Referencias de OpenGL Programming Guide, 3rd Edition ver. 1.2(“The Red Book”).

Page 3: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

33

Documentación disponibleDocumentación disponible

El Libro RojoEl Libro Rojo - The Red Book: The OpenGL Programmer's - The Red Book: The OpenGL Programmer's guide. guide. Libro de referencia y tutorial. Libro Libro de referencia y tutorial. Libro de cabecerade cabecera para para

programadores de OpenGL.programadores de OpenGL.

El Libro AzulEl Libro Azul - The Blue Book: The OpenGL Reference - The Blue Book: The OpenGL Reference manual. manual. En esencia, una copia de la páginas del manual de En esencia, una copia de la páginas del manual de

OpenGL.OpenGL.

Page 4: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

44

Características de OpenGLCaracterísticas de OpenGL

ObjetivosObjetivos1.1. Ocultar complejidad de HardwareOcultar complejidad de Hardware2.2. Ocultar las capacidades del HardwareOcultar las capacidades del Hardware

Propósito: Dibujado (puntos, líneas, Propósito: Dibujado (puntos, líneas, polígonos)polígonos)

OpenGL como una Máquina de OpenGL como una Máquina de estados (o switches)estados (o switches)

Page 5: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

55

OpenGL tiene…OpenGL tiene…

Funciones para dibujar en 2D y 3DFunciones para dibujar en 2D y 3D TransformacionesTransformaciones Algoritmos de iluminaciónAlgoritmos de iluminación Z-BufferingZ-Buffering Mapeo de TexturasMapeo de Texturas Soporte para ShadersSoporte para Shaders Blending, elementos de antialiasing , Blending, elementos de antialiasing ,

efectos de Fogefectos de Fog

Page 6: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

66

OpenGL no tiene…OpenGL no tiene…

Funciones para manejar ventanas, eventos Funciones para manejar ventanas, eventos de ratón o teclado de ratón o teclado

Funciones o procedimientos para crear un Funciones o procedimientos para crear un objeto completo a partir de una descripción objeto completo a partir de una descripción natural ejemplo: comando drawCar();natural ejemplo: comando drawCar();

Soporte nativo para dibujado de curvasSoporte nativo para dibujado de curvas Soporte nativo para audio y/o textoSoporte nativo para audio y/o texto Detección de colisionesDetección de colisiones Carga de imágenesCarga de imágenes

Page 7: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

77

Elementos necesariosElementos necesarios

Biblioteca OpenGLBiblioteca OpenGL Archivos de cabecera (.h, .pas, etc.)Archivos de cabecera (.h, .pas, etc.) Archivos obj o libArchivos obj o lib Verificar el soporte dentro de la Verificar el soporte dentro de la

plataforma elegida y bibliotecas para su plataforma elegida y bibliotecas para su ejecuciónejecución

Bibliotecas auxiliares (GLU, Glut)Bibliotecas auxiliares (GLU, Glut)

Page 8: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

88

Qué pasa con lo que no Qué pasa con lo que no tienetiene

Y las ventanas , mouse, teclado????Y las ventanas , mouse, teclado???? GLUT GL Utility ToolkitGLUT GL Utility Toolkit API de Win32API de Win32 IDE de desarrollo (forms, eventos, etc.)IDE de desarrollo (forms, eventos, etc.)

Imágenes Imágenes SDL ImageSDL Image DevilDevil

SonidoSonido SDL MixerSDL Mixer OpenALOpenAL fmodfmod

Page 9: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

99

Sintaxis BásicaSintaxis Básica

OpenGL contiene 3 elementos OpenGL contiene 3 elementos distintos básicos:distintos básicos: FuncionesFunciones ConstantesConstantes Tipos de datosTipos de datos

Page 10: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1010

FuncionesFunciones

UsosUsos Dibujado de elementosDibujado de elementos Manipulación de proyeccionesManipulación de proyecciones Transformaciones GeométricasTransformaciones Geométricas Habilitación / Deshabilitación de “switches”Habilitación / Deshabilitación de “switches” TexturizadoTexturizado Aplicación de elementos para lograr Aplicación de elementos para lograr

iluminacióniluminación Cuenta con 150 funciones básicasCuenta con 150 funciones básicas

Page 11: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1111

Sintaxis de funcionesSintaxis de funciones Se anteponen gl si pertenecen a la biblioteca Se anteponen gl si pertenecen a la biblioteca

OpenGL, glu o glut si son de éstas respectivamenteOpenGL, glu o glut si son de éstas respectivamente

Contienen información al final de cuántos Contienen información al final de cuántos parámetros reciben y cuál es su tipoparámetros reciben y cuál es su tipo

Ejemplos:Ejemplos: glVertex3fglVertex3f glVertex4fvglVertex4fv glVertex2iglVertex2i

Page 12: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1212

OpenGL Vertex/Color OpenGL Vertex/Color Command FormatsCommand FormatsglVertex3fv( v )

Number ofcomponents

2 - (x,y) 3 - (x,y,z), (r,g,b)4 - (x,y,z,w), (r,g,b,a)

Data Typeb - byteub - unsigned bytes - shortus - unsigned shorti - intui - unsigned intf - floatd - double

Vector

omit “v” forscalar form–

e.g.,glVertex2f(x, y)glColor3f(r, g, b)

glColor3fv( v )

Page 13: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1313

ConstantesConstantes UsosUsos

Activar o desactivar ciertas propiedades de Activar o desactivar ciertas propiedades de dibujado o switchesdibujado o switches

Dar ciertos valores a parámetros de funciones Dar ciertos valores a parámetros de funciones que configuran algún elementoque configuran algún elemento

Todos van con mayúsculas empezando con Todos van con mayúsculas empezando con GL y generalmente tienen _ cuando GL y generalmente tienen _ cuando presentan espacios, ya que sus nombres presentan espacios, ya que sus nombres son muy descriptivos acerca de para que son muy descriptivos acerca de para que sirvensirven

Page 14: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1414

ConstantesConstantes

Ej.Ej. GL_LIGHTINGGL_LIGHTING GL_COLOR_BUFFER_BITGL_COLOR_BUFFER_BIT GL_LINESGL_LINES

También las encontramos en GLUTTambién las encontramos en GLUT

Ej.Ej. GLUT_LEFT_BUTTONGLUT_LEFT_BUTTON

Page 15: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1515

BuffersBuffers

Color BufferColor Buffer Depth BufferDepth Buffer Stencil BufferStencil Buffer Accumulation Buffer Accumulation Buffer Selection BufferSelection Buffer

Page 16: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1616

El Front Buffer es lo que vemos en pantalla finalmente.El Front Buffer es lo que vemos en pantalla finalmente. Se renderiza en Back buffer, luego se llama a Se renderiza en Back buffer, luego se llama a

SwapBuffersSwapBuffers

Accumulation BufferStencil Buffer

Depth BufferBack Buffer

Texture 1

Texture 2

Texture 3

Window decoration

Front Buffer

Page 17: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1717

OpenGL – Depth Buffer, Double OpenGL – Depth Buffer, Double BufferBuffer

Los buffers almacenan color y profundidadLos buffers almacenan color y profundidad Eliminación de partes ocultas.Eliminación de partes ocultas. glEnable (GL_DEPTH_TEST); glEnable (GL_DEPTH_TEST);

Double buffering:Double buffering: Dibujar en un buffer mientras se está mostrando otro.Dibujar en un buffer mientras se está mostrando otro. Cuando se termina de renderizar, se intercambian los dos.Cuando se termina de renderizar, se intercambian los dos. glutSwapBuffers(); // al finalizar el bucle de glutSwapBuffers(); // al finalizar el bucle de

renderingrendering Borrando buffers:Borrando buffers:

// Borrar la pantalla con un color específico.// Borrar la pantalla con un color específico.glClearColor (0.0, 0.0, 0.0, 0.0);glClearColor (0.0, 0.0, 0.0, 0.0);

// Borrar color y depth buffers.// Borrar color y depth buffers.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Page 18: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1818

Máquina de estadosMáquina de estados

Set:Set: glPointSize(glPointSize(sizesize);); glLineWidth(width);glLineWidth(width); glLineStipple(glLineStipple(repeatrepeat, , patternpattern);); glShadeModel(glShadeModel(GLGL__SMOOTHSMOOTH););

Get: Get: glGet*();glGet*();

Habilitaciones:Habilitaciones: glEnable(glEnable(GLGL__LIGHTINGLIGHTING);); glDisable(glDisable(GL_TEXTURE_2DGL_TEXTURE_2D);); glIsEnable(GL_DEPTH_TEST);glIsEnable(GL_DEPTH_TEST);

Page 19: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

1919

Seteando estadosSeteando estados

OpenGL es una máquina de estados: los polígonos son OpenGL es una máquina de estados: los polígonos son afectados por el color, la transformación, el modo de afectados por el color, la transformación, el modo de render actuales.render actuales.

Habilitar y deshabilitar opciones como iluminación, uso Habilitar y deshabilitar opciones como iluminación, uso de texturas y alpha blending.de texturas y alpha blending.

glEnable (GL_LIGHTING); glEnable (GL_LIGHTING); // habilitar lighting (disabled por // habilitar lighting (disabled por default)default)

Olvidarse de habilitar/deshabilitar algo es el origen más Olvidarse de habilitar/deshabilitar algo es el origen más común de los bugs. Corroborar siempre el estado de las común de los bugs. Corroborar siempre el estado de las variables que necesitamos y sus valores por default. variables que necesitamos y sus valores por default. (lista de defaults en Apéndice B).(lista de defaults en Apéndice B).

Page 20: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2020

Mini “engine” Mini “engine” (método draw)(método draw)

Borrar contenido del buffer actualBorrar contenido del buffer actual Setear transformaciones (View Setear transformaciones (View

Projection, Viewport transf.) Projection, Viewport transf.) Loop para cada primitiva:Loop para cada primitiva:

TransformacionesTransformaciones Tipo de primitiva, atributos, estados de Tipo de primitiva, atributos, estados de

renderrender Flush o Swap buffersFlush o Swap buffers

Page 21: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2121

Transformaciones y Vista Transformaciones y Vista (Cap.3)(Cap.3)

OpenGL tiene 3 modos distintos de matrices:OpenGL tiene 3 modos distintos de matrices: GL_MODELVIEWGL_MODELVIEW GL_PROJECTIONGL_PROJECTION GL_TEXTUREGL_TEXTURE Por ejemplo, para trabajar con modo projection matrix: Por ejemplo, para trabajar con modo projection matrix:

glMatrixMode(GL_PROJECTION);glMatrixMode(GL_PROJECTION);

La matriz La matriz ModelviewModelview se usa para las transformaciones en los se usa para las transformaciones en los objetos.objetos.

La matrix La matrix ProjectionProjection setea la transformación de perspectiva. setea la transformación de perspectiva. Generalmente se setea una vez al comienzo del programa.Generalmente se setea una vez al comienzo del programa.

La matriz La matriz TextureTexture es usada para aplicar transformaciones a las es usada para aplicar transformaciones a las coordenadas de textura.coordenadas de textura.

Page 22: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2222

MVPVMVPV

Page 23: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2323

Operaciones de matricesOperaciones de matrices

glMatrixMode()glMatrixMode() GL_PROJECTIONGL_PROJECTION GL_MODELVIEWGL_MODELVIEW GL_TEXTUREGL_TEXTURE

glLoadIdentity()glLoadIdentity() glLoadMatrix()glLoadMatrix() glMultMatrix()glMultMatrix() glPushMatrix() glPushMatrix() glPopMatrix() glPopMatrix()

Page 24: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2424

Multiplicación de matricesMultiplicación de matrices

glMatrixMode(GL_MODELVIEW);glMatrixMode(GL_MODELVIEW); glLoadIdentity();glLoadIdentity(); glMultMatrix(N);glMultMatrix(N); glMultMatrix(M);glMultMatrix(M); glMultMatrix(L);glMultMatrix(L);

glBegin(GL_POINTS);glBegin(GL_POINTS); glVertex3f(v);glVertex3f(v); glEnd();glEnd();

La transormación final es N(M(Lv))La transormación final es N(M(Lv))

Page 25: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2525

Transformaciones de Transformaciones de modelosmodelos

Mover/trasladar objetoMover/trasladar objetoglTranslate{234}{fd}( glTranslate{234}{fd}( x, y, zx, y, z ) )

Rotar el objeto en un eje arbitrarioRotar el objeto en un eje arbitrarioglRotate{234}{fd}( glRotate{234}{fd}( angle, x, y, zangle, x, y, z ) )

Escalar, deformar, espejar objetoEscalar, deformar, espejar objetoglScale{234}{fd}( glScale{234}{fd}( x, y, zx, y, z ) )

http://www.xmission.com/~nate/tutors.html

Tutoriales de Nate Robins:

Page 26: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2626

El orden es importanteEl orden es importante

Internamente se define un nuevo espacio de coordenadas “local” en términos del espacio de coordenadas anterior.

Page 27: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2727

Primitivas en glBegin Primitivas en glBegin (Cap.2, p.44)(Cap.2, p.44)

PuntosPuntos GL_POINTSGL_POINTS LíneasLíneas GL_LINES, GL_LINE_STRIP, GL_LINE_LOOPGL_LINES, GL_LINE_STRIP, GL_LINE_LOOP TriángulosTriángulos GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FANGL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN CuadradosCuadrados GL_QUADS, GL_QUAD_STRIPGL_QUADS, GL_QUAD_STRIP PolígonosPolígonos GL_POLYGONGL_POLYGON

glBegin(GL_LINES); [invocaciones glVertex];glEnd();

glBegin(GL_QUADS); [invocaciones glVertex];glEnd();

Page 28: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2828

OpenGL: Normales y LucesOpenGL: Normales y Luces Especificar normales de manera simple como Especificar normales de manera simple como

especificamos geometría.especificamos geometría. Normalizar vectores de normales.Normalizar vectores de normales.

// each vertex has a different normal here// each vertex has a different normal hereglColor3f (0.8, 1.0, 0.5);glColor3f (0.8, 1.0, 0.5);glBegin(GL_TRIANGLES);glBegin(GL_TRIANGLES);

glNormal3fv (n0);glNormal3fv (n0);glVertex3fv (v0);glVertex3fv (v0);glNormal3fv (n1);glNormal3fv (n1);glVertex3fv (v1);glVertex3fv (v1);glNormal3fv (n2);glNormal3fv (n2);glVertex3fv (v2);glVertex3fv (v2);

glEnd();glEnd();

// all vertices have the same normal here// all vertices have the same normal hereglBegin(GL_TRIANGLES);glBegin(GL_TRIANGLES);

glNormal3fv (n0);glNormal3fv (n0);glVertex3fv (v0);glVertex3fv (v0);glVertex3fv (v1);glVertex3fv (v1);glVertex3fv (v2);glVertex3fv (v2);

glEnd();glEnd();

Page 29: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

2929

OpenGL: Luces OpenGL: Luces (Cap.5 p.173)(Cap.5 p.173)

glEnable (GL_LIGHTING);glEnable (GL_LIGHTING); OpenGL soporta un máximo de 8 luces.OpenGL soporta un máximo de 8 luces.

glEnable (GL_LIGHT0);glEnable (GL_LIGHT0);......glEnable (GL_LIGHT7);glEnable (GL_LIGHT7);

Las luces tienen una posición, un tipo, color, etc.Las luces tienen una posición, un tipo, color, etc. Posición:Posición:

float light0Position[4] = {1.0, 0.0, 4.0, 1.0};float light0Position[4] = {1.0, 0.0, 4.0, 1.0};glLightfv (GL_LIGHT0, GL_POSITION, light0Position);glLightfv (GL_LIGHT0, GL_POSITION, light0Position);

El tipo de una luz es puntual, direccional y spot. El cuarto El tipo de una luz es puntual, direccional y spot. El cuarto componente de la posición (1.0 en el ejemplo) determina el tipo. componente de la posición (1.0 en el ejemplo) determina el tipo. 0 es para luces direccionales, 1 es para luces puntuales o spots. 0 es para luces direccionales, 1 es para luces puntuales o spots. (pág. 187)(pág. 187)

Podemos setear componentes de : Ambient, Diffuse, Specular Podemos setear componentes de : Ambient, Diffuse, Specular para cada luz.para cada luz.Mirar el texto en el libro.Mirar el texto en el libro.

Page 30: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3030

OpenGL: Lighting (cont.)OpenGL: Lighting (cont.)

OpenGL soporta 2 modelos básicos de shading: flat y OpenGL soporta 2 modelos básicos de shading: flat y smooth.smooth.

glShadeModel(GL_FLAT);glShadeModel(GL_FLAT); glShadeModel(GL_SMOOTH);glShadeModel(GL_SMOOTH);

Page 31: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3131

OpenGL: Propiedades de OpenGL: Propiedades de material material (Cap.5)(Cap.5)

Se pueden especificar diferentes propiedades de Se pueden especificar diferentes propiedades de material para los polígonos.material para los polígonos. Usar Usar glMaterial*(GLenum face, GLenum pname, TYPE param);glMaterial*(GLenum face, GLenum pname, TYPE param);

Ejemplos Ejemplos ((pnamepname), pág. 202:), pág. 202: GL_AMBIENT: Ambient color del materialGL_AMBIENT: Ambient color del material GL_DIFFUSE: Diffuse color del materialGL_DIFFUSE: Diffuse color del material GL_SPECULAR: GL_SPECULAR: ComponenteComponente Specular Specular GL_SHININESS: Exponente Specular GL_SHININESS: Exponente Specular

Page 32: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3232

OpenGL: TexturingOpenGL: Texturing

Cargar los datos en crudoCargar los datos en crudo Provienen de una imagen: tga, bmp, jpgProvienen de una imagen: tga, bmp, jpg Creados en tiempo de ejecuciónCreados en tiempo de ejecución El resultado final es siempre un arregloEl resultado final es siempre un arreglo

Setear valores de entornoSetear valores de entorno Crear nombres de textura, construir Mipmaps, Crear nombres de textura, construir Mipmaps,

setear filtros, etc.setear filtros, etc. Mapear la textura a los polígonosMapear la textura a los polígonos

Especificar coordenadas s,t para los vértices del Especificar coordenadas s,t para los vértices del polígono.polígono.

Page 33: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3333

OpenGL: TexturingOpenGL: Texturing

Cargar los datosCargar los datos Unidades y clases que cargan imágenes.Unidades y clases que cargan imágenes.

Setear valores de entornoSetear valores de entorno Crear nombre de texturaCrear nombre de textura

glGenTextures(int num, int* texNames)glGenTextures(int num, int* texNames) glBindTexture(GL_TEXTURE_2D, texName);glBindTexture(GL_TEXTURE_2D, texName);

Escala, aplicación y MipmappingEscala, aplicación y Mipmapping gluScaleImage(…)gluScaleImage(…) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);GL_CLAMP);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);GL_CLAMP);

gluBuild2DMipmaps(…);gluBuild2DMipmaps(…);

Page 34: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3434

Creación de appsCreación de apps

GLUTGLUT Forms y handlesForms y handles Api de WindowsApi de Windows

Page 35: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3535

GLUT – OpenGL Utility ToolkitGLUT – OpenGL Utility Toolkit

(Apéndice D)(Apéndice D)

GLUT es una librería que maneja los eventos del sistema y las ventanas GLUT es una librería que maneja los eventos del sistema y las ventanas de la aplicación en múltiples plataformas.de la aplicación en múltiples plataformas.

Ejemplo código:Ejemplo código:

int main (int argc, char *argv[])int main (int argc, char *argv[]){{

glutInit(&argc, argv);glutInit(&argc, argv);glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);glutInitWindowSize (windowWidth, windowHeight); glutInitWindowSize (windowWidth, windowHeight); glutInitWindowPosition (0, 0);glutInitWindowPosition (0, 0);glutCreateWindow (“248 Video Game!");glutCreateWindow (“248 Video Game!");

SetStates();SetStates(); // Initialize any rendering states (your code).// Initialize any rendering states (your code).RegisterCallbacks(); RegisterCallbacks(); // Set up event callbacks (your code, coming up).// Set up event callbacks (your code, coming up).

glutMainLoop();glutMainLoop(); // Transfer control to GLUT. Doesn’t return.// Transfer control to GLUT. Doesn’t return.return 0;return 0;

}}

Page 36: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3636

GLUT Event CallbacksGLUT Event Callbacks

Registrar funciones que son llamadas cuando un Registrar funciones que son llamadas cuando un determinado evento ocurre.determinado evento ocurre.

Ejemplos:Ejemplos:

glutDisplayFunc( Display );glutDisplayFunc( Display ); // called when its time to // called when its time to drawdrawglutKeyboardFunc( Keyboard );glutKeyboardFunc( Keyboard ); // receives key input// receives key inputglutReshapeFunc( Reshape );glutReshapeFunc( Reshape ); // called when window // called when window reshapesreshapesglutMouseFunc( Mouse );glutMouseFunc( Mouse ); // called when button changes// called when button changesglutPassiveMotionFunc( PassiveFunc );glutPassiveMotionFunc( PassiveFunc ); // mouse moves, no buttons// mouse moves, no buttonsglutMotionFunc( MouseDraggedFunc );glutMotionFunc( MouseDraggedFunc ); // mouse moves, some buttons// mouse moves, some buttonsglutIdleFunc( Idle );glutIdleFunc( Idle ); // called whenever idle// called whenever idle

Page 37: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3737

Forms y Handles (llamadas a Forms y Handles (llamadas a API win32)API win32)

Ejemplo código:Ejemplo código:

procedure TForm1.FormCreate(Sender: TObject);procedure TForm1.FormCreate(Sender: TObject);beginbegin initOpengl;initOpengl; dc:=GetDC(Panel1.Handle);dc:=GetDC(Panel1.Handle); initPixelFormat();initPixelFormat(); rc :=wglCreateContext(dc);rc :=wglCreateContext(dc); wglMakeCurrent(dc,rc);wglMakeCurrent(dc,rc); glInit;glInit; Resize();Resize();end;end;

Page 38: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3838

Api de WindowsApi de Windows Utilizamos la API de windows para crear nuestra propia ventana y manejar nuestros Utilizamos la API de windows para crear nuestra propia ventana y manejar nuestros

eventos.eventos.

Ejemplo código:Ejemplo código:

function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean;function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean;varvar……beginbegin h_Instance := GetModuleHandle(nil); //Grab An Instance For Our Windowh_Instance := GetModuleHandle(nil); //Grab An Instance For Our Window ZeroMemory(@wndClass, SizeOf(wndClass)); // Clear the window class structureZeroMemory(@wndClass, SizeOf(wndClass)); // Clear the window class structure

with wndClass do // Set up the window classwith wndClass do // Set up the window class beginbegin style := CS_HREDRAW or // Redraws entire window if length changesstyle := CS_HREDRAW or // Redraws entire window if length changes CS_VREDRAW or // Redraws entire window if height changesCS_VREDRAW or // Redraws entire window if height changes CS_OWNDC; // Unique device context for the windowCS_OWNDC; // Unique device context for the window lpfnWndProc := @WndProc; // Set the window procedure to our func WndProclpfnWndProc := @WndProc; // Set the window procedure to our func WndProc hInstance := h_Instance;hInstance := h_Instance; hCursor := LoadCursor(0, IDC_ARROW);hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := 'OpenGL';lpszClassName := 'OpenGL'; end;end;

………………

Page 39: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

3939

Bindings - OpenGLBindings - OpenGL

ASM Code ASM Code Borland C++ Builder 6 Borland C++ Builder 6 BeOS BeOS C# Code C# Code VB.Net CsGL VB.Net CsGL Code Warrior 5.3 Code Warrior 5.3 Cygwin Cygwin D Language D Language Delphi Delphi Dev C++ Dev C++ Game GLUT Game GLUT GLUT Code GLUT Code Irix Code Irix Code Java Code Java Code Java/SWT CJava/SWT C Jedi-SDL Jedi-SDL JoGL JoGL LCC Win32LCC Win32 Linux Linux Linux/GLX Linux/GLX Linux/SDLLinux/SDL

LWJGL LWJGL Mac OSMac OS Mac OS X/Cocoa Mac OS X/Cocoa MASM MASM Power Basic Power Basic Pelles CPelles C Perl Perl Python Python QT/C++ QT/C++ REALbasic REALbasic Ruby Ruby Scheme Scheme Solaris Solaris Visual Basic Visual Basic Visual Fortran Visual Fortran Visual Studio .NETVisual Studio .NET

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=02

Page 40: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4040

Ejemplos - TutorialesEjemplos - Tutoriales

BSP Loader

Page 41: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4141

Ejemplos - TutorialesEjemplos - Tutoriales

Fog

Page 42: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4242

Ejemplos - TutorialesEjemplos - Tutoriales

Fuentes

Page 43: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4343

Ejemplos - TutorialesEjemplos - Tutoriales

Heightmap, Multitextura, Skybox

Page 44: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4444

Ejemplos - TutorialesEjemplos - Tutoriales

MD3 Loader - Animación

Page 45: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4545

Ejemplos - TutorialesEjemplos - Tutoriales

Wavefront OBJ Loader

Page 46: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4646

Ejemplos - TutorialesEjemplos - Tutoriales

Selección

Page 47: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4747

Ejemplos - TutorialesEjemplos - Tutoriales

Partículas

Page 48: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4848

Ejemplos - TutorialesEjemplos - Tutoriales

Render to texture

Page 49: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

4949

Ejemplos - TutorialesEjemplos - Tutoriales

Skyboxes

Page 50: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5050

Ejemplos - TutorialesEjemplos - Tutoriales

Variados

Page 51: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5151

Trabajos PrácticosTrabajos Prácticos

Salón de exposiciones:Salón de exposiciones: Datos en pantallaDatos en pantalla Environment Mapping (modelo)Environment Mapping (modelo) Sombras y/o reflejos (habitación)Sombras y/o reflejos (habitación) Efecto adicional (blending, lightmaps)Efecto adicional (blending, lightmaps)

Page 52: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5252

Trabajos PrácticosTrabajos Prácticos

Juego de ajedrez:Juego de ajedrez: Transparencias (piezas)Transparencias (piezas) Reflejos (sobre tablero) o Environment Reflejos (sobre tablero) o Environment

Mapping (piezas)Mapping (piezas) Sombras (tablero)Sombras (tablero) Selección de objetos en 3DSelección de objetos en 3D

Page 53: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5353

Trabajos PrácticosTrabajos Prácticos Shoot Game:Shoot Game:

Efectos con partículasEfectos con partículas Modelos animadosModelos animados Transparencias o máscaras de texturaTransparencias o máscaras de textura Selección de objetos en 3DSelección de objetos en 3D

Page 54: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5454

Trabajos PrácticosTrabajos Prácticos Mundos virtuales (elegir algunas):Mundos virtuales (elegir algunas):

NieblaNiebla Máscaras de texturaMáscaras de textura TransparenciasTransparencias Reflejos y/o environment mappingReflejos y/o environment mapping SombrasSombras Sistemas de partículasSistemas de partículas Modelos 3DModelos 3D

Page 55: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5555

Trabajos PrácticosTrabajos Prácticos

Otros:Otros: Heightmap (niveles)Heightmap (niveles) SombrasSombras Modelos animadosModelos animados ColisionesColisiones SkyboxesSkyboxes Efectos de partículasEfectos de partículas Técnicas + DOCTécnicas + DOC

Page 56: 1 Intro OpenGL Visualización Computacional 2. 2 ¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma

5656

Próximos pasosPróximos pasos

En la web: (próximamente)En la web: (próximamente) Tutoriales y ejemplos.Tutoriales y ejemplos. Lista de trabajos posibles para realizar.Lista de trabajos posibles para realizar. Links de interés.Links de interés.

Busquen (o nos piden):Busquen (o nos piden): Recursos (3ds, bsp, MD3)Recursos (3ds, bsp, MD3)

En Diciembre:En Diciembre: Definición de que trabajo van a realizar.Definición de que trabajo van a realizar.

Consultas vía MAIL (claridad e info):Consultas vía MAIL (claridad e info): [email protected]@exa.unicen.edu.ar [email protected]@gmail.com