Curso Computación Gráfica y OpenGL

Download Report

Transcript Curso Computación Gráfica y OpenGL

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
1
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
2
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
3
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
4
Capítulo I
Introducción a OpenGL
Curso OpenGL IEEE, Espinosa Ponce Ernesto
5
Tema 1
Qué es OpenGL
Orígenes de la Biblioteca
Curso OpenGL IEEE, Espinosa Ponce Ernesto
6
¿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
7
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
8
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
9
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
10
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
11
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
12
Tema 2
Características de la Biblioteca
Curso OpenGL IEEE, Espinosa Ponce Ernesto
13
Características de OpenGL

Objetivos
1. Ocultar complejidad de Hardware
2. 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
14
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
15
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
16
Es decir…
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
17
Pipeline de OpenGL
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
18
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
19
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
20
Tema 3
Usos, aplicaciones y alcances de la
biblioteca
Curso OpenGL IEEE, Espinosa Ponce Ernesto
21
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
22
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
23
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
24
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
25
Tema 4
Ejemplos de aplicaciones
Curso OpenGL IEEE, Espinosa Ponce Ernesto
26
Ejemplos








Piston
Mano básica
Mano iluminada
LIMN
Curvas Paramétricas
Voxelización
3DLoader
PathFinder
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
27
Mas ejemplos


Demo modelneitor con código fuente
Frets on Fire
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
28
Tema 5
Generalidades de la programación bajo
OpenGL
Curso OpenGL IEEE, Espinosa Ponce Ernesto
29
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
30
Qué pasa con lo que no tiene

Y las ventanas , mouse, teclado????



Imágenes



GLUT GL Utility Toolkit
API de Win32
SDL Image
Devil
Sonido


SDL Mixer
OpenAL
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
31
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
32
Como funciona??
HARDWARE
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
33
Sintaxis Básica

OpenGL contiene 3 elementos distintos básicos.

Funciones

Constantes

Tipos de datos
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
34
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
35
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
36
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
37
Curso OpenGL IEEE, Espinosa Ponce
Ernesto
38
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
39
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
40
¿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
41
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
42
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
43
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
44