440 likes | 545 Views
Curso Computación Gráfica y OpenGL. Impartido por Ernesto Espinosa Ponce Intersemestre 2008-1 – 2008-2 IEEE UNAM. Experiencia. Egresando de la primera generación del módulo de Computación Gráfica Experiencia de 2 años en el desarrollo de gráficos
E N D
Curso Computación Gráfica y OpenGL Impartido por Ernesto Espinosa Ponce Intersemestre 2008-1 – 2008-2 IEEE UNAM Curso OpenGL IEEE, Espinosa Ponce Ernesto
Experiencia • Egresando de la primera generación del módulo de Computación Gráfica • Experiencia de 2 años en el desarrollo de gráficos • Materias acreditadas: Computación Gráfica, Computación Gráfica Avanzada, CAD, Procesamiento Digital de Imágenes, Diseño de Interfaces, Multimedia y Realidad Virtual • Experiencia en el desarrollo de Gráficos con OpeGL tanto bajo plataforma Windows como Linux Curso OpenGL IEEE, Espinosa Ponce Ernesto
Proyectos • LIMN, Proyecto Jurasic Plant • Proyecto NXR, Modelneitor • Participación en Simulador Virtual de Operaciones de Próstata en el CCADET • Proyecto 3DLoader • Proyecto CuacraftGraphicClient • Proyecto Mictlan Engine • Desarrollo de tesis en visualización 3D de agua fluyendo Curso OpenGL IEEE, Espinosa Ponce Ernesto
Presentación de alumnos • Nombre, Semestre, Carrera • Motivo por el cual ha decidido tomar el curso • Módulo si es que lo ha elegido o cual piensa elegir • Área de interés dentro de las gráficas por computadora • Lenguajes de programación que maneja • Ha realizado desarrollo de interfaces gráficas, con qué API • Qué nivel considera tener dentro del lenguaje C • Cuáles son los resultados que espera tener al terminar este curso Curso OpenGL IEEE, Espinosa Ponce Ernesto
Capítulo I Introducción a OpenGL Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tema 1 Qué es OpenGL Orígenes de la Biblioteca Curso OpenGL IEEE, Espinosa Ponce Ernesto
¿Qué es OpenGL? • OpenGL es una biblioteca para el desarrollo de gráficos por computadora en 2D y 3D multiplataforma (Linux, Windows, Unix, MacOS, PS3) • Su nombre proviene de Open Graphics Library • Es una especificación que define una API (del inglés Application Programming Interface - Interfaz de Programación de Aplicaciones) para la programación de gráficos en varios lenguajes Curso OpenGL IEEE, Espinosa Ponce Ernesto
Orígenes de OpenGL • Inicio de la computación gráfica: Ivan Sutherland (50’s -60’s) Sketchpad • Simuladores de Vuelo • Implementaciones en ensamblador • Surgen las primeras bibliotecas de gráficos(PHIGS) • OpenGL fue creada en 1992 por Silicon Graphics Inc. , su antecesora se llamaba IRIS GL Curso OpenGL IEEE, Espinosa Ponce Ernesto
Historia de OpenGL • IRIS GL su antecesora contenía elementos y funciones para manejo de Ventanas, Ratón y Teclado que hacían tener problemas para un esquema de licenciamiento abierto • Se buscó emtonces eliminar funciones no reelevantes para gráficos, estandarizar el acceso al hardware • Se crea el OpenGL Architecture Review Board(1992) • En 1994 se trabaja en OpenGL++ pero nunca salió a la luz pública • 1995 Microsoft lanza Direct3D Curso OpenGL IEEE, Espinosa Ponce Ernesto
Un poco de más historia • En 1997 surge el proyecto Farenheit para estandarizar y unificar Direct3D y OpenGL • 1998 HP apoya el proyecto • 1999 SGI se queda solo • 2006 OpenGL pasa al Grupo Khronos • Se creó el OpenGL ARB Working Group Curso OpenGL IEEE, Espinosa Ponce Ernesto
Documentación disponible • El Libro Rojo - The Red Book: The OpenGL Programmer's guide. • Libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL. • El Libro Azul - The Blue Book: The OpenGL Reference manual. • En esencia, una copia de la páginas del man de OpenGL. • Incluye un poster desplegable con el diagrama de la estructura de una implementación ideal de OpenGL. Curso OpenGL IEEE, Espinosa Ponce Ernesto
Más documentación • El Libro Naranja - The Orange Book: The OpenGL Shading Language. • Libro de referencia y tutorial para GSLS (Lenguaje de Shaders de OpenGL) Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tema 2 Características de la Biblioteca Curso OpenGL IEEE, Espinosa Ponce Ernesto
Características de OpenGL • Objetivos • Ocultar complejidad de Hardware • Ocultar las capacidades del Hardware • Propósito: Dibujado (puntos, líneas, polígonos) • OpenGL como una Máquina de Estados , prefiero llamarlos Switches Curso OpenGL IEEE, Espinosa Ponce Ernesto
Características de OpenGL • Creada para tener la mejor calidad posible en gráficos, lo cual depende en gran medida del Hardware • Da gran libertad para crear gráficos pero requiere de conocimientos de computación gráfica • Manejo de un pipeline gráfico Curso OpenGL IEEE, Espinosa Ponce Ernesto
Pipeline Gráfico • Es el proceso mediante el cual las abstracciones de un Espacio de Objetos (vectores, vértices, muchas matemáticas) pasan a ser elementos de un Espacio de Dispositivo (que generalmente son píxeles) • Para lograrlo se aplican una serie de pasos secuenciales que realizan transformaciones, algoritmos , cosideraciones etc • Se dice que el espacio objeto es n dimensional y el de dispositivo 2D Curso OpenGL IEEE, Espinosa Ponce Ernesto
Es decir… Curso OpenGL IEEE, Espinosa Ponce Ernesto
Pipeline de OpenGL Curso OpenGL IEEE, Espinosa Ponce Ernesto
En conclusión: OpenGL tiene • Funciones para dibujar en 2D y 3D • Transformaciones • Algoritmos de iluminación • Z-Buffering • Mapeo de Texturas • Soporte para Shaders • Blending, elementos de antialiasing , efectos de Fog Curso OpenGL IEEE, Espinosa Ponce Ernesto
Y OpenGL no tiene • Funciones para manejar ventanas, eventos de ratón o teclado • Funciones o procedimientos para crear un objeto completo a partir de una descripción natural ejemplo: comando dibuja_llanta_de_un_camión • Soporte nativo para dibujado de curvas • Soporte nativo para audio y/o texto • Detección de colisiones • Carga de imágenes Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tema 3 Usos, aplicaciones y alcances de la biblioteca Curso OpenGL IEEE, Espinosa Ponce Ernesto
Usos OpenGL se ha utilizado en los siguientes campos de la computación que requieren de desarrollo de gráficos: • CAD • Realidad Virtual • Representación científica • Visualización de Información • Simuladores • Desarrollo de videojuegos (Soportada en PS3) Curso OpenGL IEEE, Espinosa Ponce Ernesto
Aplicaciones • Simuladores de vuelo militares ( EU) • Simuladores de operaciones de tejido (En Europa principalmente) • Desarrollo de videojuegos como GLQuake de IdSoftware • Programas de diseño (3D Max) • Desarrollo de Game Engines • Programas de simulación en general, CAD y CAM, etc Curso OpenGL IEEE, Espinosa Ponce Ernesto
Alcances de la biblioteca • La competencia : Direct3D • OpenGL fue diseñada para la calidad • Direct3D incluye emulación por software • Es un estándar de la industria • Soportada en muchas plataformas • Escalable y estable • Fácil de usar • Bien documentada Curso OpenGL IEEE, Espinosa Ponce Ernesto
Qué más ofrece • Extensiones : Capacidades extras que ofrecen los vendedores de hardware • Revisada constantemente • De licencia abierta • Libertad para intervenir el pipeline mediante shaders • Libertad de generar algoritmos para crear cosas no incluidas en la biblioteca Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tema 4 Ejemplos de aplicaciones Curso OpenGL IEEE, Espinosa Ponce Ernesto
Ejemplos • Piston • Mano básica • Mano iluminada • LIMN • Curvas Paramétricas • Voxelización • 3DLoader • PathFinder Curso OpenGL IEEE, Espinosa Ponce Ernesto
Mas ejemplos • Demo modelneitor con código fuente • Frets on Fire Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tema 5 Generalidades de la programación bajo OpenGL Curso OpenGL IEEE, Espinosa Ponce Ernesto
Elementos necesarios • Biblioteca OpenGL • Archivos de cabecera • Archivos obj o lib • En DevC++ existen los devpacks • Verificar el soporte dentro de la plataforma elegida y bibliotecas para su ejecución • Estructura de directorios estándar para OpenGL • Biblioteca auxiliar GLU (GL Utilities) Curso OpenGL IEEE, Espinosa Ponce Ernesto
Qué pasa con lo que no tiene • Y las ventanas , mouse, teclado???? • GLUT GL Utility Toolkit • API de Win32 • Imágenes • SDL Image • Devil • Sonido • SDL Mixer • OpenAL Curso OpenGL IEEE, Espinosa Ponce Ernesto
Y en linux?? • Implementación libre Mesa3D • Biblioteca “like” OpenGL • Generalmente puede descargarse en paquetes para su programación • Tampoco contiene elementos para manejo de ventanas • Opciones GTK, SDL, GLUT, FreeGLUT, OpenGLUT Curso OpenGL IEEE, Espinosa Ponce Ernesto
Como funciona?? HARDWARE Curso OpenGL IEEE, Espinosa Ponce Ernesto
Sintaxis Básica • OpenGL contiene 3 elementos distintos básicos. • Funciones • Constantes • Tipos de datos Curso OpenGL IEEE, Espinosa Ponce Ernesto
Funciones • Usos • Dibujado de elementos • Manipulación de proyecciones • Transformaciones Geométricas • Habilitación / Deshabilitación de “switches” • Texturizado • Aplicación de elementos para lograr iluminación • Cuenta con 150 funciones básicas Curso OpenGL IEEE, Espinosa Ponce Ernesto
Sintaxis de funciones • Se anteponen gl si pertenecen a la biblioteca OpenGL, glu o glut si son de éstas respectivamente • Contienen información al final de cuántos parámetros reciben y cuál es su tipo • Ejemplos: • glVertex3f • glVertex3fv • glVertex3i Curso OpenGL IEEE, Espinosa Ponce Ernesto
Tipos de datos • Evitan problemas de implementación en compiladores donde el tamaño de los tipos de datos son diferentes a los estándares • Se recomienda su uso para asegurar el rendimiento de una aplicación más no es necesario u obligatorio • Inician con GL Curso OpenGL IEEE, Espinosa Ponce Ernesto
Constantes • Usos • Activar o desactivar ciertas propiedades de dibujado o switches • Dar ciertos valores a parámetros de funciones que configuran algún elemento • Todos van con mayúsculas empezando con GL y generalmente tienen _ cuando presentan espacios, ya que sus nombres son muy descriptivos acerca de para que sirven Curso OpenGL IEEE, Espinosa Ponce Ernesto
Constantes • Ej. • GL_LIGHTING • GL_COLOR_BUFFER_BIT • GL_LINES • También las encontramos en GLUT Ej. • GLUT_LEFT_BUTTON Curso OpenGL IEEE, Espinosa Ponce Ernesto
¿Qué más necesito? • Conocer elementos de computación gráfica • Buen nivel de programación básica en C • Conocer qué es lo que está haciendo por dentro el CPU para dar mayor rendimiento o por lo menos tener nociones • Manejo de estructuras de datos en un buen nivel • Ingenio, dedicación y desarrollos de proyectos personales, tiempo Curso OpenGL IEEE, Espinosa Ponce Ernesto
Recomendaciones y consideraciones • Tamaño en memoria • Rapidez de la aplicación = mayor rendimiento • Detalles como saltos a funciones • Manejo de apuntadores • Búsqueda de elementos que hagan más rápido el procesamiento • Optimizar algoritmos lo más que se pueda • Dejar el sistema de ventanas y manejador de eventos independiente de la parte que dibuja Curso OpenGL IEEE, Espinosa Ponce Ernesto
Empezando a trabajar con gráficos • Instalación y configuración del ambiente de trabajo • Visual Studio 2005 • Verificación del soporte para los programas (dll’s) • Agregar las librerías y configurar proyectos • Bibliotecas que vamos a revisar • OpenGL • GLU (solo algunos elementos) • GLUT ( procesamiento de ventanas, eventos) Curso OpenGL IEEE, Espinosa Ponce Ernesto
Comportamiento de una aplicación gráfica Inicialización Variables Usuario Variables de Objetos Variables Ambiente Ejecución de acciones Salida a Usuario Termina Liberar Recursos Curso OpenGL IEEE, Espinosa Ponce Ernesto