Curso OpenGL IEEE, Espinosa Ponce Ernesto 1
Curso Curso Computación Computación
Gráfica y OpenGLGráfica y OpenGLImpartido por Impartido por
Ernesto Espinosa PonceErnesto Espinosa Ponce
Intersemestre 2008-1 – 2008-Intersemestre 2008-1 – 2008-22
IEEE UNAMIEEE UNAM
2Curso OpenGL IEEE, Espinosa Ponce Ernesto
ExperienciaExperiencia
Egresando de la primera generación del Egresando de la primera generación del módulo de Computación Gráficamódulo de Computación Gráfica
Experiencia de 2 años en el desarrollo de Experiencia de 2 años en el desarrollo de gráficosgráficos
Materias acreditadas: Computación Gráfica, Materias acreditadas: Computación Gráfica, Computación Gráfica Avanzada, CAD, Computación Gráfica Avanzada, CAD, Procesamiento Digital de Imágenes, Diseño de Procesamiento Digital de Imágenes, Diseño de Interfaces, Multimedia y Realidad VirtualInterfaces, Multimedia y Realidad Virtual
Experiencia en el desarrollo de Gráficos con Experiencia en el desarrollo de Gráficos con OpeGL tanto bajo plataforma Windows como OpeGL tanto bajo plataforma Windows como LinuxLinux
3Curso OpenGL IEEE, Espinosa Ponce Ernesto
ProyectosProyectos
LIMN, Proyecto Jurasic PlantLIMN, Proyecto Jurasic Plant Proyecto NXR, ModelneitorProyecto NXR, Modelneitor Participación en Simulador Virtual de Participación en Simulador Virtual de
Operaciones de Próstata en el CCADETOperaciones de Próstata en el CCADET Proyecto 3DLoaderProyecto 3DLoader Proyecto CuacraftGraphicClientProyecto CuacraftGraphicClient Proyecto Mictlan EngineProyecto Mictlan Engine Desarrollo de tesis en visualización 3D de Desarrollo de tesis en visualización 3D de
agua fluyendoagua fluyendo
4Curso OpenGL IEEE, Espinosa Ponce Ernesto
Presentación de alumnosPresentación de alumnos Nombre, Semestre, CarreraNombre, Semestre, Carrera Motivo por el cual ha decidido tomar el cursoMotivo por el cual ha decidido tomar el curso Módulo si es que lo ha elegido o cual piensa Módulo si es que lo ha elegido o cual piensa
elegirelegir Área de interés dentro de las gráficas por Área de interés dentro de las gráficas por
computadoracomputadora Lenguajes de programación que manejaLenguajes de programación que maneja Ha realizado desarrollo de interfaces gráficas, Ha realizado desarrollo de interfaces gráficas,
con qué APIcon qué API Qué nivel considera tener dentro del lenguaje CQué nivel considera tener dentro del lenguaje C Cuáles son los resultados que espera tener al Cuáles son los resultados que espera tener al
terminar este cursoterminar este curso
Curso OpenGL IEEE, Espinosa Ponce Ernesto 5
Capítulo ICapítulo I
Introducción a OpenGLIntroducción a OpenGL
Curso OpenGL IEEE, Espinosa Ponce Ernesto 6
Tema 1Tema 1
Qué es OpenGLQué es OpenGL
Orígenes de la BibliotecaOrígenes de la Biblioteca
7Curso OpenGL IEEE, Espinosa Ponce Ernesto
¿Qué es OpenGL?¿Qué es OpenGL? OpenGL es una biblioteca para el desarrollo OpenGL es una biblioteca para el desarrollo
de gráficos por computadora en 2D y 3D de gráficos por computadora en 2D y 3D multiplataforma (Linux, Windows, Unix, multiplataforma (Linux, Windows, Unix, MacOS, PS3)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 (del inglés inglés Application Programming Interface Application Programming Interface - Interfaz de Programación de - Interfaz de Programación de AplicacionesAplicaciones) para la programación de ) para la programación de gráficos en varios lenguajesgráficos en varios lenguajes
8Curso OpenGL IEEE, Espinosa Ponce Ernesto
Orígenes de OpenGLOrígenes de OpenGL
Inicio de la computación gráfica: Ivan Inicio de la computación gráfica: Ivan Sutherland (50’s -60’s) SketchpadSutherland (50’s -60’s) Sketchpad
Simuladores de VueloSimuladores de Vuelo Implementaciones en ensambladorImplementaciones en ensamblador Surgen las primeras bibliotecas de Surgen las primeras bibliotecas de
gráficos(PHIGS)gráficos(PHIGS) OpenGL fue creada en 1992 por OpenGL fue creada en 1992 por
Silicon Graphics Inc. , su antecesora Silicon Graphics Inc. , su antecesora se llamaba IRIS GLse llamaba IRIS GL
9Curso OpenGL IEEE, Espinosa Ponce Ernesto
Historia de OpenGLHistoria de OpenGL IRIS GL su antecesora contenía elementos y IRIS GL su antecesora contenía elementos y
funciones para manejo de Ventanas, Ratón y funciones para manejo de Ventanas, Ratón y Teclado que hacían tener problemas para un Teclado que hacían tener problemas para un esquema de licenciamiento abiertoesquema de licenciamiento abierto
Se buscó emtonces eliminar funciones no Se buscó emtonces eliminar funciones no reelevantes para gráficos, estandarizar el reelevantes para gráficos, estandarizar el acceso al hardwareacceso al hardware
Se crea el OpenGL Architecture Review Se crea el OpenGL Architecture Review Board(1992)Board(1992)
En 1994 se trabaja en OpenGL++ pero nunca En 1994 se trabaja en OpenGL++ pero nunca salió a la luz públicasalió a la luz pública
1995 Microsoft lanza Direct3D 1995 Microsoft lanza Direct3D
10Curso OpenGL IEEE, Espinosa Ponce Ernesto
Un poco de más historiaUn poco de más historia
En 1997 surge el proyecto Farenheit En 1997 surge el proyecto Farenheit para estandarizar y unificar Direct3D para estandarizar y unificar Direct3D y OpenGLy OpenGL
1998 HP apoya el proyecto1998 HP apoya el proyecto 1999 SGI se queda solo1999 SGI se queda solo 2006 OpenGL pasa al Grupo 2006 OpenGL pasa al Grupo Khronos Khronos Se creó el Se creó el OpenGL ARB Working OpenGL ARB Working
GroupGroup
11Curso OpenGL IEEE, Espinosa Ponce Ernesto
Documentación Documentación disponibledisponible
El Libro RojoEl Libro Rojo - The Red Book: The OpenGL - The Red Book: The OpenGL Programmer's guide. Programmer's guide. Libro de referencia y tutorial. Considerado libro Libro de referencia y tutorial. Considerado libro de de
cabeceracabecera para programadores de OpenGL. para programadores de OpenGL.
El Libro AzulEl Libro Azul - The Blue Book: The OpenGL - The Blue Book: The OpenGL Reference manual. Reference manual. En esencia, una copia de la páginas del man de En esencia, una copia de la páginas del man de
OpenGL.OpenGL. Incluye un poster desplegable con el diagrama de la Incluye un poster desplegable con el diagrama de la
estructura de una implementación estructura de una implementación idealideal de OpenGL. de OpenGL.
12Curso OpenGL IEEE, Espinosa Ponce Ernesto
Más documentaciónMás documentación
El Libro NaranjaEl Libro Naranja - The Orange - The Orange Book: The OpenGL Shading Book: The OpenGL Shading Language. Language. Libro de referencia y tutorial para GSLS Libro de referencia y tutorial para GSLS
(Lenguaje de Shaders de OpenGL)(Lenguaje de Shaders de OpenGL)
Curso OpenGL IEEE, Espinosa Ponce Ernesto 13
Tema 2Tema 2
Características de la Características de la BibliotecaBiblioteca
14Curso OpenGL IEEE, Espinosa Ponce Ernesto
Características de Características de OpenGLOpenGL
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 , prefiero llamarlos SwitchesEstados , prefiero llamarlos Switches
15Curso OpenGL IEEE, Espinosa Ponce Ernesto
Características de Características de OpenGLOpenGL
Creada para tener la mejor calidad Creada para tener la mejor calidad posible en gráficos, lo cual depende posible en gráficos, lo cual depende en gran medida del Hardwareen gran medida del Hardware
Da gran libertad para crear gráficos Da gran libertad para crear gráficos pero requiere de conocimientos de pero requiere de conocimientos de computación gráficacomputación gráfica
Manejo de un pipeline gráficoManejo de un pipeline gráfico
16Curso OpenGL IEEE, Espinosa Ponce Ernesto
Pipeline Gráfico Pipeline Gráfico
Es el proceso mediante el cual las Es el proceso mediante el cual las abstracciones de un Espacio de Objetos abstracciones de un Espacio de Objetos (vectores, vértices, muchas matemáticas) (vectores, vértices, muchas matemáticas) pasan a ser elementos de un Espacio de pasan a ser elementos de un Espacio de Dispositivo (que generalmente son píxeles)Dispositivo (que generalmente son píxeles)
Para lograrlo se aplican una serie de pasos Para lograrlo se aplican una serie de pasos secuenciales que realizan transformaciones, secuenciales que realizan transformaciones, algoritmos , cosideraciones etcalgoritmos , cosideraciones etc
Se dice que el espacio objeto es n Se dice que el espacio objeto es n dimensional y el de dispositivo 2Ddimensional y el de dispositivo 2D
17Curso OpenGL IEEE, Espinosa Ponce Ernesto
Es decir…Es decir…
18Curso OpenGL IEEE, Espinosa Ponce Ernesto
Pipeline de OpenGLPipeline de OpenGL
19Curso OpenGL IEEE, Espinosa Ponce Ernesto
En conclusión: OpenGL En conclusión: OpenGL tienetiene
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
20Curso OpenGL IEEE, Espinosa Ponce Ernesto
Y OpenGL no tieneY 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 natural ejemplo: comando dibuja_llanta_de_un_camióndibuja_llanta_de_un_camión
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
Curso OpenGL IEEE, Espinosa Ponce Ernesto 21
Tema 3Tema 3
Usos, aplicaciones y alcances Usos, aplicaciones y alcances de la bibliotecade la biblioteca
22Curso OpenGL IEEE, Espinosa Ponce Ernesto
UsosUsos
OpenGL se ha utilizado en los siguientes OpenGL se ha utilizado en los siguientes campos de la computación que requieren de campos de la computación que requieren de desarrollo de gráficos:desarrollo de gráficos:
CADCAD Realidad VirtualRealidad Virtual Representación científicaRepresentación científica Visualización de InformaciónVisualización de Información SimuladoresSimuladores Desarrollo de videojuegos Desarrollo de videojuegos (Soportada en (Soportada en
PS3)PS3)
23Curso OpenGL IEEE, Espinosa Ponce Ernesto
AplicacionesAplicaciones
Simuladores de vuelo militares ( EU)Simuladores de vuelo militares ( EU) Simuladores de operaciones de Simuladores de operaciones de
tejido (En Europa principalmente)tejido (En Europa principalmente) Desarrollo de videojuegos como Desarrollo de videojuegos como
GLQuake de IdSoftwareGLQuake de IdSoftware Programas de diseño (3D Max)Programas de diseño (3D Max) Desarrollo de Game EnginesDesarrollo de Game Engines Programas de simulación en general, Programas de simulación en general,
CAD y CAM, etcCAD y CAM, etc
24Curso OpenGL IEEE, Espinosa Ponce Ernesto
Alcances de la bibliotecaAlcances de la biblioteca
La competencia : Direct3DLa competencia : Direct3D OpenGL fue diseñada para la calidadOpenGL fue diseñada para la calidad Direct3D incluye emulación por Direct3D incluye emulación por
softwaresoftware Es un estándar de la industriaEs un estándar de la industria Soportada en muchas plataformas Soportada en muchas plataformas Escalable y estableEscalable y estable Fácil de usarFácil de usar Bien documentadaBien documentada
25Curso OpenGL IEEE, Espinosa Ponce Ernesto
Qué más ofreceQué más ofrece
Extensiones : Capacidades extras que Extensiones : Capacidades extras que ofrecen los vendedores de hardwareofrecen los vendedores de hardware
Revisada constantementeRevisada constantemente De licencia abiertaDe licencia abierta Libertad para intervenir el pipeline Libertad para intervenir el pipeline
mediante shadersmediante shaders Libertad de generar algoritmos para Libertad de generar algoritmos para
crear cosas no incluidas en la crear cosas no incluidas en la bibliotecabiblioteca
Curso OpenGL IEEE, Espinosa Ponce Ernesto 26
Tema 4Tema 4
Ejemplos de aplicacionesEjemplos de aplicaciones
27Curso OpenGL IEEE, Espinosa Ponce Ernesto
EjemplosEjemplos
PistonPiston Mano básicaMano básica Mano iluminadaMano iluminada LIMNLIMN Curvas ParamétricasCurvas Paramétricas VoxelizaciónVoxelización 3DLoader3DLoader PathFinderPathFinder
28Curso OpenGL IEEE, Espinosa Ponce Ernesto
Mas ejemplosMas ejemplos
Demo modelneitor con código fuenteDemo modelneitor con código fuente Frets on FireFrets on Fire
Curso OpenGL IEEE, Espinosa Ponce Ernesto 29
Tema 5Tema 5
Generalidades de la Generalidades de la programación bajo OpenGLprogramación bajo OpenGL
30Curso OpenGL IEEE, Espinosa Ponce Ernesto
Elementos necesariosElementos necesarios
Biblioteca OpenGLBiblioteca OpenGL Archivos de cabecera Archivos de cabecera Archivos obj o libArchivos obj o lib En DevC++ existen los devpacksEn DevC++ existen los devpacks Verificar el soporte dentro de la plataforma Verificar el soporte dentro de la plataforma
elegida y bibliotecas para su ejecuciónelegida y bibliotecas para su ejecución
Estructura de directorios estándar para Estructura de directorios estándar para OpenGLOpenGL
Biblioteca auxiliar GLU (GL Utilities)Biblioteca auxiliar GLU (GL Utilities)
31Curso OpenGL IEEE, Espinosa Ponce Ernesto
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
Imágenes Imágenes SDL ImageSDL Image DevilDevil
SonidoSonido SDL MixerSDL Mixer OpenALOpenAL
32Curso OpenGL IEEE, Espinosa Ponce Ernesto
Y en linux??Y en linux??
Implementación libre Mesa3DImplementación libre Mesa3D Biblioteca “like” OpenGLBiblioteca “like” OpenGL Generalmente puede descargarse en Generalmente puede descargarse en
paquetes para su programaciónpaquetes para su programación Tampoco contiene elementos para Tampoco contiene elementos para
manejo de ventanasmanejo de ventanas Opciones GTK, SDL, GLUT, FreeGLUT, Opciones GTK, SDL, GLUT, FreeGLUT,
OpenGLUTOpenGLUT
33Curso OpenGL IEEE, Espinosa Ponce Ernesto
Como funciona??Como funciona??
HARDWARE
34Curso OpenGL IEEE, Espinosa Ponce Ernesto
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
35Curso OpenGL IEEE, Espinosa Ponce Ernesto
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
36Curso OpenGL IEEE, Espinosa Ponce Ernesto
Sintaxis de funcionesSintaxis de funciones
Se anteponen gl si pertenecen a la Se anteponen gl si pertenecen a la biblioteca OpenGL, glu o glut si son biblioteca OpenGL, glu o glut si son de éstas respectivamentede éstas respectivamente
Contienen información al final de Contienen información al final de cuántos parámetros reciben y cuál es cuántos parámetros reciben y cuál es su tiposu tipo
Ejemplos:Ejemplos: glVertex3fglVertex3f glVertex3fvglVertex3fv glVertex3iglVertex3i
37Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tipos de datosTipos de datos
Evitan problemas de implementación Evitan problemas de implementación en compiladores donde el tamaño de en compiladores donde el tamaño de los tipos de datos son diferentes a los los tipos de datos son diferentes a los estándaresestándares
Se recomienda su uso para asegurar Se recomienda su uso para asegurar el rendimiento de una aplicación más el rendimiento de una aplicación más no es necesario u obligatoriono es necesario u obligatorio
Inician con GLInician con GL
38Curso OpenGL IEEE, Espinosa Ponce Ernesto
39Curso OpenGL IEEE, Espinosa Ponce Ernesto
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 Dar ciertos valores a parámetros de
funciones que configuran algún elementofunciones que configuran algún elemento Todos van con mayúsculas empezando Todos van con mayúsculas empezando
con GL y generalmente tienen _ cuando con 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
40Curso OpenGL IEEE, Espinosa Ponce Ernesto
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
41Curso OpenGL IEEE, Espinosa Ponce Ernesto
¿Qué más necesito?¿Qué más necesito?
Conocer elementos de computación Conocer elementos de computación gráficagráfica
Buen nivel de programación básica en CBuen nivel de programación básica en C Conocer qué es lo que está haciendo por Conocer qué es lo que está haciendo por
dentro el CPU para dar mayor dentro el CPU para dar mayor rendimiento o por lo menos tener nocionesrendimiento o por lo menos tener nociones
Manejo de estructuras de datos en un Manejo de estructuras de datos en un buen nivelbuen nivel
Ingenio, dedicación y desarrollos de Ingenio, dedicación y desarrollos de proyectos personales, tiempoproyectos personales, tiempo
42Curso OpenGL IEEE, Espinosa Ponce Ernesto
Recomendaciones y Recomendaciones y consideracionesconsideraciones
Tamaño en memoria Tamaño en memoria Rapidez de la aplicación = mayor rendimientoRapidez de la aplicación = mayor rendimiento Detalles como saltos a funcionesDetalles como saltos a funciones Manejo de apuntadoresManejo de apuntadores Búsqueda de elementos que hagan más Búsqueda de elementos que hagan más
rápido el procesamientorápido el procesamiento Optimizar algoritmos lo más que se puedaOptimizar algoritmos lo más que se pueda Dejar el sistema de ventanas y manejador de Dejar el sistema de ventanas y manejador de
eventos independiente de la parte que dibujaeventos independiente de la parte que dibuja
43Curso OpenGL IEEE, Espinosa Ponce Ernesto
Empezando a trabajar con Empezando a trabajar con gráficosgráficos
Instalación y configuración del ambiente Instalación y configuración del ambiente de trabajode trabajo Visual Studio 2005Visual Studio 2005 Verificación del soporte para los programas Verificación del soporte para los programas
(dll’s)(dll’s) Agregar las librerías y configurar proyectosAgregar las librerías y configurar proyectos
Bibliotecas que vamos a revisarBibliotecas que vamos a revisar OpenGLOpenGL GLU (solo algunos elementos)GLU (solo algunos elementos) GLUT ( procesamiento de ventanas, GLUT ( procesamiento de ventanas,
eventos)eventos)
44Curso OpenGL IEEE, Espinosa Ponce Ernesto
Comportamiento de una Comportamiento de una aplicación gráficaaplicación gráfica
Inicialización
Variables Usuario
Variables Ambiente
Variables de Objetos
Ejecución de acciones
Salida a Usuario
Termina
Liberar Recursos