Proyecciones en OpenGL

Documentos relacionados
Apuntes de OpenGL y GLUT Cristina Cañero Morales

Gràfics per computador

3.- Vista Tridimensional.

1. INTRODUCCIÓN A OPENGL: DIBUJANDO UNA TORTUGA CON OPENGL

Lenguaje de Programación: C++ GLUT (como instalarlo)

Transformaciones en OpenGL

Transformaciones en OpenGL

TECNUNLOGO: UN LOGO EN TRES DIMENSIONES

Una Aplicación Informática para la Enseñanza de las Transformaciones Geométricas 3D

Gráficos tridimensionales

ANA BALLESTER DIBUJO TÉCNICO 1º BACH 1

Curso de introducción a OpenGL (v1.0)

TEMA 7 SISTEMA AXONOMETRICO

Tutorial de uso de HAPTIK bajo Windows

Escenarios 3D en OpenGL. Ivan Olmos Pineda

Lección 8 Vistas y Proyecciones

EDUCACIÓN PLÁSTICA Y VISUAL UNIDAD 5: Sistema Diédrico. Vistas.

Mini Manual de OpenGL Por Daniel Barrero - 11/6/2002

Proyecciones ortogonales o vistas.

El pipeline de visualización es el conjunto de

Gráficos por Computador

Profesor: Vicente Destruels Moreno. Practica guiada 1

NORMALES. Computación Gráfica

También puede dibujarse la perspectiva caballera con los ejes formando otros ángulos, lo que ofrece una vista ligeramente distinta del objeto.

Ejercicios de Gráficos Proyecciones

Unidad 3 Los sistemas de representación

PROBLEMAS RESUELTOS SELECTIVIDAD ANDALUCÍA 2006 MATEMÁTICAS II TEMA 3: ESPACIO AFIN Y EUCLIDEO

Laboratorio de Graficación. Garibaldi Pineda García

Descomposición de Prisma de Base Triangular en Pirámides Equivalentes.

Visión artificial y Robótica Geometría. Depto. de Ciencia de la Computación e Inteligencia Artificial

TEMA 9: SISTEMA DIÉDRICO: VISTAS PRINCIPALES. DIBUJO EN PERSPECTIVA. ACOTACIÓN

Introducción a la Programación Gráfica con OpenGL

Apunte de Tabulaciones Microsoft Office Word Tabulaciones.

Sistemas de referencia Introducción a OpenGL

6. TIPOS DE FUENTES DE LUZ

UNIDAD Nº 5 GEOMETRÍA DESCRIPTIVA - PERSPECTIVA

Hay veces que no basta con dos proyecciones para definir un objeto; es necesaria una tercera proyección.

unidad 11 Transformaciones geométricas

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Programación Gráfica II. 7. Diseño de Cámaras.

Estos márgenes se definen en el menú Archivo, Configurar página... se nos muestra un cuadro de dialogo como este con tres pestañas:

Breve introducción al grupo de Rubik

Cómo introducir las coordenadas de un punto? Cómo representar gráficamente las coordenadas de un punto? Puntos en el plano

INTRODUCCIÓN DEL TEMA 4 PRODUCTO ESCALAR

EJERCICIOS DE SELECTIVIDAD DE GEOMETRIA

PROBLEMAS DE OPTIMIZACIÓN

Gimp. Operaciones básicas y dibujo por ordenador

METODOS DE REPRESENTACIÓN

Operación de Microsoft Excel

Tutorial sombras CE3X

EXCEL I UNIDAD 1 EMPEZANDO A TRABAJAR CON EXCEL (SEMANA 1)

Distancia focal de una lente convergente (método del desplazamiento) Fundamento

Sistemas de dos ecuaciones lineales de primer grado con dos incógnitas

Se puede asignar formato a las entradas de las celdas a fin de que los datos queden alineados u

SISTEMA CÓNICO CENTRO JUAN XXIII-CARTUJA. GRANADA 2º BACHILLER. DIBUJO TÉCNICO PERSPECTIVA CÓNICA 1

PROPIEDAD POSITION CSS: STATIC, RELATIVE, ABSOLUTE, FIXED. TOP, RIGHT, BOTTOM, LEFT. EJEMPLOS EJERCICIOS DE POSICIONAMIENTO RESUELTOS (CU01032D)

Funciones y sus gráficas

Contenido Semana 1 (Introducción a AutoCAD 3D)

or t o G o n a l i d a d y

1. Introducción PAG 1

BLOQUE TEMATICO IV. Lección 10 PERSPECTIVA CABALLERA Principios y consecuencias de la Perspectiva Caballera.

DEGRADADOS CSS. EFECTO LINEAL Y RADIAL. LINEAR-GRADIENT. ANGULOS CSS: UNIDADES ANGULARES DEG, GRAD, TURN, RAD. (CU01060D)

Bases Matemáticas para la Educación Primaria. Guía de Estudio. Tema 5: Transformaciones geométricas planas. Orientación espacial

Isométricos. Ing. Carlos Camacho Soto Escuela de Ingeniería Civil Universidad de Costa Rica IC-302. Setiembre 2005

INTRODUCCIÓN DEL TEMA 2 ESPACIOS VECTORIALES

Tutorial de uso de OHAE sobre windows

Operaciones de Mecanizado Manuales WhitePaper Octubre de 2006

INTRODUCCIÓN A OpenGL

2. Distancia entre dos puntos. Punto medio de un segmento

6.1 Una primera aplicación de los cuaternios: rotación de un cuerpo rígido

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

APUNTES DE FÍSICA I Profesor: José Fernando Pinto Parra UNIDAD 2 ÁLGEBRA VECTORIAL

Proyecciones. Producto escalar de vectores. Aplicaciones

Dr. GEO. Versión 10.12

Vistas de un objeto VISTAS DE UN OBJETO

TEMA 4 REPRESENTACION DE OBJETOS.VISTAS

DISEÑO DE PÁGINAS WEB CON CÓDIGO HTML TEXTO EN MOVIMIENTO

Programación. Test Autoevaluación Tema 3

Tema 7: Geometría Analítica. Rectas.

Problema a) En un triángulo rectángulo OAB una recta r paralela a la hipotenusa corta a los catetos OA y OB en los puntos A y B respectivamente.

TEMA 7. ÓPTICA GEOMÉTRICA.

Tema 2: Teorema de estructura de los grupos abelianos finitamente generados.

La parábola es el lugar geométrico de los puntos del plano que equidistan de un punto fijo llamado foco y de una recta fija llamada directriz.

Semana04[1/25] Secciones Cónicas. 22 de marzo de Secciones Cónicas

Procesador de textos 1-15 Inserción de objetos

Interpretación geométrica de la derivada

Fórmulas en Puntos WhitePaper Noviembre de 2006

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Función lineal Ecuación de la recta

Modulación Estantes Estante Fijo: Estante móvil: Estante Auxiliar: Estante Inclinado: Estantes Múltiples:

Conceptos básicos de Geometría

5.CREACIÓN DE TABLAS.

Álgebra y Trigonometría Clase 2 Ecuaciones, desigualdades y Funciones

INTRODUCCIÓN A LA PERSPECTIVA CÓNICA OBLICUA

Sistema óptico: sistema a través del cual puede pasar la luz y que separa dos medios de distinto índice de refracción Sistemas centrados

INSTITUTO UNIVERSITARIO DE CALDAS DOCENTE: ING. CRISTINA CANO. TEMA: LA PARABOLA. GRADO: FECHA: MARZO 7 DE 2016.

Clase No. 13: Factorización QR MAT 251. Joaquín Peña (CIMAT) Métodos Numéricos (MAT 251) / 16

D1 Generalidades: El punto

Mi primera aplicación OpenGL con MFC. Con esta guía rápida, escribiremos nuestra primera aplicación OpenGL con MFC (Microsoft Foundations Class).

Con punto fijo Rotaciones Simetría Axial Sin punto fijo Traslaciones Reflexión Deslizante

Transcripción:

Proyecciones en OpenGL Una vez definida una escena en coordenadas del mundo, tenemos que tomar la foto. Para esto, tenemos que hacer dos cosas: colocar la cámara en el mundo (o sea, en la escena) y definir el tipo de proyección que realizará la cámara. Posición de la cámara Tenemos que definir no sólo la posición de la cámara (o donde está), sino también hacia dónde mira y con qué orientación (no es lo mismo mirar con la cara torcida que recta, aunque veamos lo mismo). Para hacer esto, basta con modificar la matriz ModelView para mover toda la escena de manera que parezca que hemos movido la cámara. El problema de este sistema es que tenemos que pensar bastante en las transformaciones a aplicar. Es por ello que OpenGL proporciona la función glulookat. Su sintaxis es la siguiente: void glulookat( eyex, eyey, eyez, cenx, ceny, cenz, vp_x, vp_y, vp_z); donde eye corresponde a la posición de la cámara, cen corresponde al punto hacia donde mira la cámara y vp es un vector que define la orientación de la cámara. No podemos llamar a glulookat en cualquier momento, puesto que tiene postmultiplicar la matriz ModelView (por tanto, conviene llamarla primero). El vector vp no puede ser paralelo al vector formado por eye y cen, es más, debería ser perpendicular. Si no, el resultado es impredecible. Al mismo tiempo que se define la posición y orientación de la cámara, hay que definir el tipo de foto que se hará como si seleccionáramos el objetivo. Es decir, definir la forma del volumen de visualización. La primera elección que tenemos que hacer es si queremos una proyección ortogonal o perspectiva. Dependiendo del tipo de aplicación, utilizaremos una u otra. En OpenGL, para definir la proyección, modificaremos la matriz Projection. Para hacer esto, pues, tendremos que hacer una llamada a glmatrixmode(gl_projection), para indicarle que vamos a modificar esta matriz. A partir de ese momento, todas las funciones de transformación (glrotatef, gltranslatef, glscalef, etc) y las de la pila (glpushmatrix y glpopmatrix) se aplican sobre esta matriz. Abraham Sánchez López 1

Proyección ortogonal Para el caso de la proyección ortogonal la analogía de la cámara no es tan evidente, porque en realidad estamos definiendo una caja, o volumen de visualización alrededor del eye de la cámara (esto es, podemos ver detrás) Para hacer esto, llamamos a glortho(left, right, bottom, top, near, far) Como se aprecia en la figura, la foto obtenida incluye tanto a la tetera como al toro, puesto que el volumen de visualización tiene un near negativo (detrás de la cámara) y por tanto el volumen de visualización lo incluirá. Esto sería equivalente a tener la cámara situada de la siguiente manera: En este caso, la imagen sería la misma, pero near y far serían ambos positivos, puesto que el volumen se está definiendo por delante de la cámara. Si near y far fueran los valores de la figura anterior, entonces seguramente sólo aparecería en la imagen el toro, puesto que el volumen de visualización estaría centrado en la cámara. Proyección perspectiva El caso de la proyección perspectiva es más intuitivo, puesto que la analogía de la cámara se cumple bastante bien. Así, una vez que hemos situado la cámara en la escena, definimos el volumen de visualización mediante la función: glfrustum(left, right, bottom, top, near, far) Esta función, aunque tiene los mismos parámetros que glortho, éstos tienen un significado ligeramente distinto. Mientras que left, right, bottom y top siguen definiendo el tamaño y forma del plano near de proyección, los parámetros near y far ahora deben cumplir la relación 0 < near < far. De hecho, en ningún caso near debe tomar el valor 0, puesto que Abraham Sánchez López 2

los resultados serán impredecibles. El volumen de visualización generado es como se muestra en la figura siguiente: Observando la imagen obtenida, el toro tiene una apariencia mucho mayor que la tetera, que está más lejos. Esta es la principal diferencia con la proyección ortogonal, los rayos proyectivos no son paralelos.una manera más simple de definir la proyección perspectiva es mediante la función gluperspective(alpha, aspect, near, far). Veamos con detalle cada uno de estos parámetros: En esta función, alpha corresponde al ángulo de apertura del campo de visión en la dirección de y, near es la distancia mínima a la que deben estar los objetos para salir en la foto y far es la distancia máxima (ambas siempre positivas) El parámetro aspect define la relación entre el ángulo de visión horizontal y vertical (es la anchura/altura), y típicamente debería ser entre 30 y 35 grados para obtener resultados realistas. La relación entre far/near debería ser lo más cercana posible a 1. Ejemplo de definición de la posición de la cámara y el tipo de proyección glpushmatrix(); /* Guardamos la matriz de proyeccion */ glloadidentity(); /* P = I */ gluperspective(30.0f, anchura / altura, 1.0, 10.0); glmatrixmode(gl_modelview); glpushmatrix(); /* Guardamos la matriz del modelo */ glloadidentity(); /* M = I; */ /* Colocamos la camara en el punto deseado */ glulookat(0, 5, 5, 0, 0, 0, 0, 1, 0); /* Dibujamos una tetera roja centrada en (-1, 0, 0) */ gltranslatef(-1.0f, 0.0f, 0.0f); Abraham Sánchez López 3

glcolor3f(1.0f, 0.0f, 0.0f); glutwireteapot(0.5f); glpopmatrix(); /* Recuperamos la antigua matriz del modelo */ glpopmatrix(); /* Recuperamos la antigua matriz de proyeccion */ La definición del viewport se realiza de manera sencilla mediante la función: glviewport(x, y, cx, cy); donde (x, y) es la esquina superior izquierda del viewport en coordenadas de la pantalla y (cx, cy) corresponden a la anchura y altura del viewport deseado. Por defecto, GLUT define el viewport ocupando toda la ventana. Manteniendo la proporción de los objetos En la sección anterior hemos introducido el concepto de aspect, que corresponde a la relación anchura/altura. Cuando definimos el volumen de visualización, es importante que el aspect de éste sea el mismo que el de viewport (ventana de visualización). Así, si definimos un volumen de visualización que es el doble de alto que de ancho (aspect = 0.5), y nuestro viewport es cuadrado (aspect = 1) la imagen que obtendremos podría tener la siguiente apariencia: Como se puede observar, aunque el volumen de visualización es suficientemente grande para contener todo el objeto, la imagen sale deformada. En cambio, si nuestro volumen de visualización tiene aspect 1, aunque estemos incluyendo más volumen del necesario para incluir nuestro objeto en su totalidad, la imagen obtenida será: que no ha sufrido ninguna deformación, lo cual es interesante en la mayoría de aplicaciones. La definición del aspect del volumen de visualización cuando se usa gluperspective es trivial, basta con pasarle el parámetro adecuado. Para el caso de las funciones glfrustum y glortho hay que definir los valores left, right, top y bottom teniendo en cuenta que a relación que tienen que mantener entre ellos tiene que ser la misma que el ancho y alto de nuestro viewport. Abraham Sánchez López 4

Ejemplo de preservación de la proporción #include <gl/glut.h> float aspect = 1.0f; void display(void) glclear(gl_color_buffer_bit); glloadidentity(); gluperspective(20.0f, aspect aspect, 1.0f, 10.0f); glmatrixmode(gl_modelview); glloadidentity(); glulookat(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); glutwireteapot(0.5); glflush(); glutswapbuffers(); void onsize(int sx, int sy) glviewport(0, 0, sx, sy); aspect = (float) sx / (float) sy; void main(void) glutinitdisplaymode(glut_double GLUT_RGB GLUT_DEPTH); glutinitwindowsize(400, 400); glutinitwindowposition(100, 100); glutcreatewindow("ejemplo de proporcion"); glutdisplayfunc(display); glutreshapefunc(onsize); glutmainloop(); Abraham Sánchez López 5