Visualización Computacional 2

Slides:



Advertisements
Presentaciones similares
Diseño y Animación en la Educación Presentado por: Roger Brandao Juan Bermúdez Francisco Bravo Antony Domínguz.
Advertisements

Curvas y Superficies Referencia – capítulo 11 del Libro Rojo.
Sombras y Reflejos en Tiempo Real
1 Curso Básico de C.I.O. Light Sección 2 Configuración y Utilidades Sección 2 - Configuración y Utilidades.
Desarrollo de Juegos de Video en 3D
Sistemas de Graficación
Scripting en el lado del Cliente
Desarrollo de aplicaciones para Windows con VB.NET 2005 Capitulo 3.
Herramientas y bibliotecas para gráficas
Agenda Conceptos Claves.
Modelando aplicaciones
Descartes 2.0 Edición de de escenas Escena Acceso al editor Doble clic dentro de la escena.
Sistemas de coordenadas de referencia
Introducción a los gráficos 3D
DESARROLLO DE VIDEOJUEGOS Y EFECTOS ESPECIALES DE CINE
Ariel Brunetto Director Aquadize Studios
Desarrollo de Aplicaciones para Internet
Java Binding for the OpenGL API Unidad III. ¿Qué es OpenGL? Open GL es un entorno de desarrollo portable de aplicaciones gráficas interactivas en 2D y.
Tema 2: Lenguaje PHP básico
Sintaxis básica del lenguaje
Entornos de programación
Es el arte de instruir a un computador sobre los pasos necesarios para resolver los problemas que influyen en la creación de un videojuego. Es el.
Introducción a OpenGL Mª del Carmen Santos.
Computación Gráfica Unidad I: Introducción Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008.
Free Pascal 1. Introducción 2. Instalación 3. Uso 4. Documentación 5. Información Adicional.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
PRESENTACIONES EFECTIVAS Licda. Maura de Magaña Sábado de 7:00 a 12:00
GAME MAKER. INTRODUCCIÓN Game Maker es un entorno para el desarrollo de juegos, creado en 1999 por Mark Overmars, profesor del departamento de Ciencia.
Ingeniero Anyelo Quintero
PRINCIPIOS DE PROGRAMACION ESTRUCTURADA
Dibujar en 3D: puntos, líneas y polígonos.
Transformaciones en OpenGL
El lenguaje de programación Java
Visualizador de imágenes remotas Alumno: Juan Pablo García Ortíz Director: Vicente Gonzalez Ruiz.
SQL SERVER Reporting Services
Introducción a la Programación. Lenguaje de Máquina.
ESTRUCTURA DE DATOS EN JAVA
Migsar Tu foto.
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
COMPLEMENTOS DE INSTALACION DE SOFTWARE API´s y Complementos Plug-ins.
Fundamentos.  Abstracción Matemática  Rendering  Pre-rendering  Real-time rendering.
Valor X Valor Y Punto (0,0) Coordenadas.
Curso de OpenGL Verano de hrs. de adrenalina 3D M.C. Luis A. Zarza López.
SISTEMAS OPERATIVOS EQUIPO 9: GRUPO: Luna Rodríguez Diana Alejandra
Computación Gráfica Modelado de la Iluminación y el Color Docentes: Néstor Calvo Ángel Calegaris Walter Sotil 2008.
Carlos Carrasco de Pedro Daniel Sanz Sanfructuoso

Fundamentos.  Abstracción Matemática  Rendering  Pre-rendering  Real-time rendering.
TexturasTexturas Visualización Computacional II. Horarios (again…) LUNES 26/10: Aula 2 Facultad (19 hs.): Introducción MARTES 27/10: Aula 2 Facultad (19.
Introducción a los gráficos 3D
1 Introducción a Java y Diseño orientado a objetos ELO-329 Diseño y programación orientados a objetos 1s05.
Hermilia Molina Acevedo
Introducción al Lenguaje. ¿Qué es PHP? O Es un lenguaje de programación que es interpretado por un servidor web. O El lenguaje es genérico. PHP está orientado.
Computación Gráfica I – CI4321
1 Introducción a Java y Diseño orientado a objetos ELO-329 Diseño y programación orientados a objetos 1s04.
Visualización Computacional 2
1 Algunas ideas básicas en C++ Agustín J. González ELO-329.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE INTERFACES.
Trabajo grupal Flash Integrantes: Piero Álvarez Milena Gómez Verónica Castillo Cristian Rodríguez.
Programación de Videojuegos
Introducción a GDevelop
Prof. Víctor Aquino Urrutia
Diseño y Programación Orientados a Objetos1 Introducción a Java.
Que es Power Point? Es un programa diseñado para hacer presentaciones con texto esquematizado, fácil de entender, animaciones de texto e imágenes, imágenes.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Interfaz de C++ Builder Cuando usted inicia C++ Builder, espera ver una solo ventana para desarrollar sus aplicaciones; pero C++ Builder le presenta un.
Transcripción de la presentación:

Visualización Computacional 2 Intro OpenGL Visualización Computacional 2

¿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 Nota: Referencias de OpenGL Programming Guide, 3rd Edition ver. 1.2 (“The Red Book”).

Documentación disponible El Libro Rojo - The Red Book: The OpenGL Programmer's guide. Libro de referencia y tutorial. 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 manual de OpenGL.

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 (o switches)

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

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 drawCar(); Soporte nativo para dibujado de curvas Soporte nativo para audio y/o texto Detección de colisiones Carga de imágenes

Elementos necesarios Biblioteca OpenGL Archivos de cabecera (.h, .pas, etc.) Archivos obj o lib Verificar el soporte dentro de la plataforma elegida y bibliotecas para su ejecución Bibliotecas auxiliares (GLU, Glut)

Qué pasa con lo que no tiene Y las ventanas , mouse, teclado???? GLUT GL Utility Toolkit API de Win32 IDE de desarrollo (forms, eventos, etc.) Imágenes SDL Image Devil Sonido SDL Mixer OpenAL fmod

Sintaxis Básica OpenGL contiene 3 elementos distintos básicos: Funciones Constantes Tipos de datos

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

Sintaxis de funciones Ejemplos: 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 glVertex4fv glVertex2i

OpenGL Vertex/Color Command Formats glVertex3fv( v ) glColor3fv( v ) Number of components Data Type Vector b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double omit “v” for scalar form– e.g., glVertex2f(x, y) glColor3f(r, g, b) 2 - (x,y) 3 - (x,y,z), (r,g,b) 4 - (x,y,z,w), (r,g,b,a)

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

Constantes Ej. También las encontramos en GLUT GL_LIGHTING GL_COLOR_BUFFER_BIT GL_LINES También las encontramos en GLUT GLUT_LEFT_BUTTON

Buffers Color Buffer Depth Buffer Stencil Buffer Accumulation Buffer Selection Buffer

El Front Buffer es lo que vemos en pantalla finalmente. Se renderiza en Back buffer, luego se llama a SwapBuffers Texture 1 Accumulation Buffer Stencil Buffer Depth Buffer Texture 2 Back Buffer Window decoration Front Buffer Texture 3

OpenGL – Depth Buffer, Double Buffer Los buffers almacenan color y profundidad Eliminación de partes ocultas. glEnable (GL_DEPTH_TEST); Double buffering: Dibujar en un buffer mientras se está mostrando otro. Cuando se termina de renderizar, se intercambian los dos. glutSwapBuffers(); // al finalizar el bucle de rendering Borrando buffers: // Borrar la pantalla con un color específico. glClearColor (0.0, 0.0, 0.0, 0.0); // Borrar color y depth buffers. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

Máquina de estados Set: Get: Habilitaciones: glPointSize(size); glLineWidth(width); glLineStipple(repeat, pattern); glShadeModel(GL_SMOOTH); Get: glGet*(); Habilitaciones: glEnable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); glIsEnable(GL_DEPTH_TEST);

Seteando estados OpenGL es una máquina de estados: los polígonos son afectados por el color, la transformación, el modo de render actuales. Habilitar y deshabilitar opciones como iluminación, uso de texturas y alpha blending. glEnable (GL_LIGHTING); // habilitar lighting (disabled por default) Olvidarse de habilitar/deshabilitar algo es el origen más común de los bugs. Corroborar siempre el estado de las variables que necesitamos y sus valores por default. (lista de defaults en Apéndice B).

Mini “engine” (método draw) Borrar contenido del buffer actual Setear transformaciones (View Projection, Viewport transf.) Loop para cada primitiva: Transformaciones Tipo de primitiva, atributos, estados de render Flush o Swap buffers

Transformaciones y Vista (Cap.3) OpenGL tiene 3 modos distintos de matrices: GL_MODELVIEW GL_PROJECTION GL_TEXTURE Por ejemplo, para trabajar con modo projection matrix: glMatrixMode(GL_PROJECTION); La matriz Modelview se usa para las transformaciones en los objetos. La matrix Projection setea la transformación de perspectiva. Generalmente se setea una vez al comienzo del programa. La matriz Texture es usada para aplicar transformaciones a las coordenadas de textura.

MVPV

Operaciones de matrices glMatrixMode() GL_PROJECTION GL_MODELVIEW GL_TEXTURE glLoadIdentity() glLoadMatrix() glMultMatrix() glPushMatrix() glPopMatrix()

Multiplicación de matrices glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMultMatrix(N); glMultMatrix(M); glMultMatrix(L); glBegin(GL_POINTS); glVertex3f(v); glEnd(); La transormación final es N(M(Lv))

Transformaciones de modelos Mover/trasladar objeto glTranslate{234}{fd}( x, y, z ) Rotar el objeto en un eje arbitrario glRotate{234}{fd}( angle, x, y, z ) Escalar, deformar, espejar objeto glScale{234}{fd}( x, y, z ) Tutoriales de Nate Robins: http://www.xmission.com/~nate/tutors.html

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

Primitivas en glBegin (Cap.2, p.44) Puntos GL_POINTS Líneas GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP Triángulos GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN Cuadrados GL_QUADS, GL_QUAD_STRIP Polígonos GL_POLYGON glBegin(GL_LINES); [invocaciones glVertex]; glEnd(); glBegin(GL_QUADS); [invocaciones glVertex]; glEnd();

OpenGL: Normales y Luces Especificar normales de manera simple como especificamos geometría. Normalizar vectores de normales. // each vertex has a different normal here glColor3f (0.8, 1.0, 0.5); glBegin(GL_TRIANGLES); glNormal3fv (n0); glVertex3fv (v0); glNormal3fv (n1); glVertex3fv (v1); glNormal3fv (n2); glVertex3fv (v2); glEnd(); // all vertices have the same normal here glBegin(GL_TRIANGLES); glNormal3fv (n0); glVertex3fv (v0); glVertex3fv (v1); glVertex3fv (v2); glEnd();

OpenGL: Luces (Cap.5 p.173) glEnable (GL_LIGHTING); OpenGL soporta un máximo de 8 luces. glEnable (GL_LIGHT0); ... glEnable (GL_LIGHT7); Las luces tienen una posición, un tipo, color, etc. Posición: float light0Position[4] = {1.0, 0.0, 4.0, 1.0}; glLightfv (GL_LIGHT0, GL_POSITION, light0Position); 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. 0 es para luces direccionales, 1 es para luces puntuales o spots. (pág. 187) Podemos setear componentes de : Ambient, Diffuse, Specular para cada luz. Mirar el texto en el libro.

OpenGL: Lighting (cont.) OpenGL soporta 2 modelos básicos de shading: flat y smooth. glShadeModel(GL_FLAT); glShadeModel(GL_SMOOTH);

OpenGL: Propiedades de material (Cap.5) Se pueden especificar diferentes propiedades de material para los polígonos. Usar glMaterial*(GLenum face, GLenum pname, TYPE param); Ejemplos (pname), pág. 202: GL_AMBIENT: Ambient color del material GL_DIFFUSE: Diffuse color del material GL_SPECULAR: Componente Specular GL_SHININESS: Exponente Specular

OpenGL: Texturing Cargar los datos en crudo Setear valores de entorno Provienen de una imagen: tga, bmp, jpg Creados en tiempo de ejecución El resultado final es siempre un arreglo Setear valores de entorno Crear nombres de textura, construir Mipmaps, setear filtros, etc. Mapear la textura a los polígonos Especificar coordenadas s,t para los vértices del polígono.

OpenGL: Texturing Crear nombre de textura Cargar los datos Unidades y clases que cargan imágenes. Setear valores de entorno Crear nombre de textura glGenTextures(int num, int* texNames) glBindTexture(GL_TEXTURE_2D, texName); Escala, aplicación y Mipmapping gluScaleImage(…) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); gluBuild2DMipmaps(…);

Creación de apps GLUT Forms y handles Api de Windows

GLUT – OpenGL Utility Toolkit (Apéndice D) GLUT es una librería que maneja los eventos del sistema y las ventanas de la aplicación en múltiples plataformas. Ejemplo código: int main (int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize (windowWidth, windowHeight); glutInitWindowPosition (0, 0); glutCreateWindow (“248 Video Game!"); SetStates(); // Initialize any rendering states (your code). RegisterCallbacks(); // Set up event callbacks (your code, coming up). glutMainLoop(); // Transfer control to GLUT. Doesn’t return. return 0; }

GLUT Event Callbacks Registrar funciones que son llamadas cuando un determinado evento ocurre. Ejemplos: glutDisplayFunc( Display ); // called when its time to draw glutKeyboardFunc( Keyboard ); // receives key input glutReshapeFunc( Reshape ); // called when window reshapes glutMouseFunc( Mouse ); // called when button changes glutPassiveMotionFunc( PassiveFunc ); // mouse moves, no buttons glutMotionFunc( MouseDraggedFunc ); // mouse moves, some buttons glutIdleFunc( Idle ); // called whenever idle

Forms y Handles (llamadas a API win32) Ejemplo código: procedure TForm1.FormCreate(Sender: TObject); begin initOpengl; dc:=GetDC(Panel1.Handle); initPixelFormat(); rc :=wglCreateContext(dc); wglMakeCurrent(dc,rc); glInit; Resize(); end;

Api de Windows Ejemplo código: Utilizamos la API de windows para crear nuestra propia ventana y manejar nuestros eventos. Ejemplo código: function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean; var … begin h_Instance := GetModuleHandle(nil); //Grab An Instance For Our Window ZeroMemory(@wndClass, SizeOf(wndClass)); // Clear the window class structure with wndClass do // Set up the window class style := CS_HREDRAW or // Redraws entire window if length changes CS_VREDRAW or // Redraws entire window if height changes CS_OWNDC; // Unique device context for the window lpfnWndProc := @WndProc; // Set the window procedure to our func WndProc hInstance := h_Instance; hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := 'OpenGL'; end;

Bindings - OpenGL http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=02 LWJGL Mac OS Mac OS X/Cocoa MASM Power Basic Pelles C Perl Python QT/C++ REALbasic Ruby Scheme Solaris Visual Basic Visual Fortran Visual Studio .NET ASM Code Borland C++ Builder 6 BeOS C# Code VB.Net CsGL Code Warrior 5.3 Cygwin D Language Delphi Dev C++ Game GLUT GLUT Code Irix Code Java Code Java/SWT C Jedi-SDL JoGL LCC Win32 Linux Linux/GLX Linux/SDL

Ejemplos - Tutoriales BSP Loader

Ejemplos - Tutoriales Fog

Ejemplos - Tutoriales Fuentes

Ejemplos - Tutoriales Heightmap, Multitextura, Skybox

Ejemplos - Tutoriales MD3 Loader - Animación

Ejemplos - Tutoriales Wavefront OBJ Loader

Ejemplos - Tutoriales Selección

Ejemplos - Tutoriales Partículas

Ejemplos - Tutoriales Render to texture

Ejemplos - Tutoriales Skyboxes

Ejemplos - Tutoriales Variados

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

Trabajos Prácticos Juego de ajedrez: Transparencias (piezas) Reflejos (sobre tablero) o Environment Mapping (piezas) Sombras (tablero) Selección de objetos en 3D

Trabajos Prácticos Shoot Game: Efectos con partículas Modelos animados Transparencias o máscaras de textura Selección de objetos en 3D

Trabajos Prácticos Mundos virtuales (elegir algunas): Niebla Máscaras de textura Transparencias Reflejos y/o environment mapping Sombras Sistemas de partículas Modelos 3D

Trabajos Prácticos Otros: Heightmap (niveles) Sombras Modelos animados Colisiones Skyboxes Efectos de partículas Técnicas + DOC

Próximos pasos En Diciembre: Definición de que trabajo van a realizar. En la web: (próximamente) Tutoriales y ejemplos. Lista de trabajos posibles para realizar. Links de interés. Busquen (o nos piden): Recursos (3ds, bsp, MD3) En Diciembre: Definición de que trabajo van a realizar. Consultas vía MAIL (claridad e info): jpdamato@exa.unicen.edu.ar cristianGB@gmail.com