Viewports e Interacción con el Mouse CG 2014.

Documentos relacionados
3.- Vista Tridimensional.

Introducción AutoCAD 3D

Transformaciones en OpenGL

El pipeline de visualización es el conjunto de

C =[x 1,y 1,x 2,y 2,...,x n,y n ]

Transformaciones en OpenGL

Tutorial Programa Oziexplorer

ÁLGEBRA VECTORIAL Y MATRICES. Ciclo 02 de Circunferencia.

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

Gimp. Operaciones básicas y dibujo por ordenador

Álgebra Lineal Ma1010

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

Qué son las fórmulas de Excel?

Entorno de trabajo de Excel 2010

Curso de AutoCAD 2010 Apunte Parte II

Competencias TIC para profesionales Del Siglo 21

Cómo manejar el editor HTML de Moodle?

Excel 2010 Introducción al entorno de trabajo

MANUAL PARA EL MANEJO DE GRAPHMATICA 2.0C

COMBINAR CORRESPONDENCIA

Parciales Matemática CBC Parciales Resueltos - Exapuni.

m=0 La ecuación de una recta se puede obtener a partir de dos puntos por los que pase la recta: y y1 = m(x x1)

MANUAL Y ACTIVIDADES. Edublogg.wordpress.com. Caeiro Fábregas - Pérez

En este tutorial vamos a aprender a mover la ventana de nuestro menú a la posición de la pantalla que queramos.

PUNTO DE DIVISIÓN DE UN SEGMENTO EN UNA RAZÓN DADA. El Problema de la escuela Supongamos que la figura siguiente representa el patio de una escuela.

TUTORIAL SOBRE HOJAS DE CALCULO

RESUMEN TEORIA MATEMATICAS 5

Función Coseno la derivada de la función Seno?

NORMALES. Computación Gráfica

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

Operaciones básicas con hojas de cálculo

5 Continuidad y derivabilidad de funciones reales de varias variables reales.

Precálculo 1 - Ejercicios de Práctica. 1. La pendiente de la línea (o recta) que pasa por los puntos P(2, -1) y Q(0, 3) es:

4. ANÁLISIS DE FUNCIONES DE UNA VARIABLE

Retículos y Álgebras de Boole

USO DEL OBJETO JTABLE

Rectas y Planos en el Espacio

Unidad 5: Geometría Analítica

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

Forma polar de números complejos (repaso breve)

Guía de Matemática Tercero Medio

Dr. GEO. Versión 10.12

INSTITUCION EDUCATIVA COLEGIO TOLEDO PLATA PLAN DE ÁREA DE TECNOLOGIA E INFORMATICA GRADO 8º

FUNCIONES CON DESCARTES. HOJA DE TRABAJO

Instructivo Costo Promedio Ponderado en el software administrativo

RECTAS EN EL ESPACIO. P y un vector v se llama recta al conjunto de. Q del espacio para los cuales se cumple que el vector PQ es paralelo

CORPORACIÓN UNIFICADA NACIONAL DE EDUCACIÓN SUPERIOR FACULTAD DE INGENIERIAS LINEA INFORMÁTICA GUIA TABLAS DINÁMICAS

Base y Dimensión de un Espacio Vectorial

III. Utilización del Smith Chart para calcular el VSWR, el máximo de voltaje y el mínimo de voltaje en una línea de transmisión

CREACIÓN DE MATRICES DESDE LA APLICACIÓN PRINCIPAL

ECUACIÓN DE LA RECTA

Algebra lineal y conjuntos convexos

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

Club GeoGebra Iberoamericano. 9 INECUACIONES 2ª Parte

EJERCICIOS DE GEOMETRÍA

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

TEMA 2: TRATAMIENTO DE IMAGEN Y SONIDO

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

Lección 8 Vistas y Proyecciones

Cambios del Sistema de Coordenadas. Transformación de

Consulta con salida Chart (Parte I)

Reporting (objeto Query)

SUPERFICIES CUÁDRICAS

PERIODO 2-1 PRESENTADOR MULTIMEDIA POWERPOINT CONCEPTOS BÁSICOS INTRODUCCIÓN AL PROGRAMA MICROSOFT POWERPOINT

Cálculo Integral Enero 2015

Paint Otro de los accesorios que incorpora Windows 95 es Microsoft Paint, un sencillo programa de Dibujo.

CONSIDERACIONES GENERALES DEL FUNCIONAMIENTO DEL PROGRAMA

Elaboración de Documentos en Procesadores de Textos

Gráficos por Computador

CÓMO DIBUJAR UNA MERIDIANA Ederlinda Viñuales Atrévete con el Universo

APD SATCA 1 : Carrera:

TALLER CON HERRAMIENTAS GIS

MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.6

Problemas de exámenes de Geometría

Colegio Universitario Boston

Técnicas de inteligencia artificial. Visión Artificial Visión 3D

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Cómo crear animaciones en Flash?

1. Sistema de coordenadas polares.

1. Cómo introducir datos en SPSS/PC? - Recordatorio

INGENIERÍA TELEINFORMÁTICA

Se abre una ventana que permite especificar el número de filas y columnas para la tabla.

MATHEMATICA. Geometría - Triángulos. Ricardo Villafaña Figueroa. Ricardo Villafaña Figueroa. Material realizado con Mathematica y Geometry Expressions

1.- CREACIÓN DE CONSULTAS.

UNIVERSIDAD NACIONAL AUTONOMA DE NICARAGUA UNAN-MANAGUA FAREM - CARAZO

Áreas entre curvas. Ejercicios resueltos

EJERCICIOS DE GEOMETRÍA PLANA. 1. Hallar las ecuaciones paramétricas de la recta r que pasa por el punto ( 2, 2) tiene como vector director el vector

IES Fco Ayala de Granada Junio de 2011 (Específico Modelo 5) Solución Germán-Jesús Rubio Luna. Opción A

PERIODO 3 HOJA DE CÁLCULO CONCEPTOS INTERMEDIOS OPERACIONES CON CELDAS, FILAS Y COLUMNAS EN EXCEL SELECCIONAR COPIAR MOVER BORRAR

GUÍA RÁPIDA POLIGONALES CON TRIMBLE SURVEY CONTROLLER

Cambia al área de trabajo situada debajo de la actual.

1 Representación por superficies de polígonos

Materia: Matemática de Tercer Año Tema: Pendiente

Tema: Excel Formulas, Funciones y Macros

Guía resumida para configurar un sistema Linux virtualizado y ejecutar Simusol

MICROSOFT EXCEL 2016 Avanzado

Teoría Tema 1 Sistema de inecuaciones - Programación lineal

Transcripción:

Viewports e Interacción con el Mouse CG 2014.

Introducción Los vértices sufren transformaciones para pasar del mundo a la pantalla. Estas transformaciones, las especificamos mediante matrices.

Ventana del mundo Luego de modelar los objetos y la escena 2D (mediante transformaciones, con más matrices!!) Debemos seleccionar qué área de este mundo queremos mostrar. Esto lo hacemos especificando una matriz de proyección. Esta matriz también va a determinar la forma en la que veremos la escena (proyección).

En OpenGL Para especificar esa matriz de proyección, se utiliza(ba): glortho(left, right, bottom, top, near, far); gluperspective(fovy, aspect, near, far); Ahora, nosotros debemos ocuparnos de crear la matriz. Pero OpenTK provee clases y estructuras para trabajar con matrices y vectores. Estas clases poseen operadores sobrecargados para que podamos utilizarlos más fácilmente. (+, -, *, /)

En OpenTK Matrix4 projmat; projmat = Matrix4.CreateOrthographicOffCenter( left, right, bottom, top, znear, zfar); projmat = Matrix4.CreatePerspective( fovy, aspect, znear, zfar); Con esto creamos una matriz. Resta hacer que nuestro shader (de vértices) las utilice. Usar variables uniform :

Ventana (En 2D)

Ventana (En 3D)

Viewport La última de las transformaciones es la de Viewport. La transformación de viewport especifica en qué región de la pantalla será dibujada la escena. (en nuestro caso, en qué región del GLControl) Al trabajar sobre la pantalla, las coordenadas son números enteros (pixels). (A diferencia de las coordenadas de la ventana, que son números reales).

En OpenGL En OpenGL especificamos la información del viewport mediante: glviewport(x, y, width, height); OpenTK sobrecarga este método: GL.Viewport(x, y, width, height); GL.Viewport(rectangle); GL.Viewport(point, size); GL.Viewport(size);

Viewport Coordenadas de la ventana (mi glcontrol), según OpenGL y w h (x,y) x

Relación de aspecto Relación de aspecto = ancho / alto Si la región del mundo que queremos dibujar tiene una relación de aspecto distinta a la del viewport, veremos nuestra escena deformada.

Relación de aspecto Podemos: Calcular las dimensiones del viewport en función de la relación de aspecto de la ventana. Ajustar la ventana en función de las dimensiones del viewport. Que diferencia hay?

Ejemplo: ex Laboratorio 3

Cómo lo logramos? Tenemos que dibujar la misma figura 2 veces: Primero: Una ventana 2D que abarque a toda la figura. Un viewport a la izquierda. Luego: Una ventana que abarque sólo una parte de la figura (zoom). Un viewport a la derecha.

Pseudocódigo void On_Paint(){... SetearViewport(viewport1); SetearVentana(projMatrix1); figura.dibujar(); } SetearViewport(viewport2); SetearVentana(projMatrix2); figura.dibujar();...

Pseudocódigo Podemos utilizar dos variables de tipo Rectangle (System.Drawing) para guardar información de los viewports. Y dos variables de tipo OpenTK.Matrix4 para las matrices de proyección. Rectangle viewport1 = new...; Rectangle viewport2 = new...; Matrix4 projmat1 = Matrix4.CreateOrthog..; Matrix4 projmat2 = Matrix4.CreateOrthog...;

Pseudocódigo Dónde actualizamos los valores de los viewports? void glcontrol1_resize(..){ }; //Sacar las cuentas en función de glcontrol1.width //glcontrol1.height y el aspectratio de la ventana viewport1.x =...; // 2D viewport1.y =...; viewport1.width =...; viewport1.height =...; viewport2.x =...;... glcontrol1.invalidate();

Interacción con el mouse Aparte de la interacción mediante controles (botones, sliders, checkboxes, etc), podemos interactuar con el glcontrol utilizando el mouse. Qué interacciones serán posibles? Manejar la cámara. Seleccionar un área para hacer zoom. Seleccionar un objeto de la escena. (Picker). Etc...

Interacción con el Mouse El componente GLControl (al igual que todos los componentes de Windows) tiene el evento Click(...) que se dispara cuando se realiza un click de mouse sobre el componente.

OpenGL vs Windows y x x y Usan el eje Y distinto!

Picker 3D Existen varias formas de implementar un picker 3D: Utilizando el buffer de stencil. Utilizando el buffer de profundidad. Revertir las transformaciones.(unproject) Veremos la última, que es la más elegante, aunque presenta sus ventajas y desventajas. http://myweb.lmu.edu/dondi/share/cg/unprojectexplained.pdf

Picker 3D - El problema Cuanto windows nos reporta (mediante un evento) que se realizó un click en la posición (x, y) del glcontrol, A qué posición de la escena 3D corresponde? En qué espacio de coordenadas vemos la información del framebuffer?

Unproject Los vértices se fueron transformando, hasta llegar a coordenadas de pantalla. Ahora quiero el camino inverso, es decir, a partir de una posición en pantalla, determinar a qué posición en el mundo corresponde.

Unproject De eso se encarga(ba) la función gluunproject(...); Esta función no está disponible en OpenTK. La tenemos que implementar! Consultar la documentación de esta función, para comprender bien el significado de los parámetros.

Unproject Vector3 UnProject(Vector3 win, Matrix4 mviewmat, Matrix4 projmat, Rectangle viewport) { Vector3 resul = Vector3.Zero; Vector4 _in = Vector4.Zero; Vector4 _out = Vector4.Zero; Matrix4 onematrix; //Combinamos las dos matrices y las invertimos. onematrix = Matrix4.Multiply(mViewMat, projmat); onematrix.invert();

Unproject (cont.) _in.x = win.x; _in.y = win.y; _in.z = win.z; _in.w = 1.0f; //Map x and y from window coordinates. _in.x = (_in.x - viewport.x) / viewport.width; _in.y = (_in.y - viewport.y) / viewport.height; //Map to range -1 to 1. _in.x = _in.x * 2-1; _in.y = _in.y * 2-1; _in.z = _in.z * 2-1;

Unproject (cont.) //Antitransformamos. _out = Vector4.Transform(_in, onematrix); if ((_out.w > float.epsilon) { (_out.w < -float.epsilon)) _out.x = _out.x / _out.w; _out.y = _out.y / _out.w; _out.z = _out.z / _out.w; }else{ throw new Exception("UnProject: No pudo antitransformar."); }

Unproject (cont.) resul.x = _out.x; resul.y = _out.y; resul.z = _out.z; }; return resul; Este método lo vamos a utilizar en el manejador del evento Click();

Unproject La posición en coordenadas de ventana, (window) tiene 3 componentes (x, y, z). La ventana es tridimensional. Nosotros solamente tenemos las coordenadas bidimensionales (x, y), que nos reporta el componente. Un punto en la pantalla, corresponde a toda una línea en la ventana 3D.

Pantalla vs. Ventana

Unproject Cómo determinamos las coordenadas de este segmento de línea (o rayo)? Utilizamos: z win = 0.0, para el plano near; z win = 1.0, para el plano far. Entonces debemos llamar dos veces a esta función, una para calcular la posición en el plano near, y otra en el far.

Secuencia de pasos Dada una posición (x pant, y pant ): Invertir la coordenada y pant. Obtener los valores de las matrices de modelview, Projection y el Viewport utilizado. Llamar 2 veces al Unproject(...), una vez con: (x pant, y pant, 0.0) y la segunda con (x pant, y pant, 1.0) Con los dos puntos obtenidos, tenemos la ecuación de la recta. Recorrer cada objeto de la escena y ver si intersecta a alguno (usar Bounding Box)

Observaciones Si en la matriz modelview, utilizamos solamente la de view (model = Identidad): La ecuación de la recta, estará en coordenadas del mundo. Al comparar la recta con cada objeto, pasar las coordenadas de los mismos a coordendas del mundo. Si usamos la view y la model (de cada obj): La ecuación de la recta estará en coord. del objeto (comparación directa) Pero, hay que repetir el proceso por cada objeto (cada uno tiene su matriz de modelado).

Observaciones Desventajas: Intersección de los objetos con una recta (se puede utilizar bounding-box) Si hay varios objetos que intersectan el rayo Cuál elegimos? Podemos parametrizar la recta como: L(u) = nearpoint + u * (farpoint - nearpoint); u en el intervalo [0..1] u = 0, el plano near u = 1, el plano far.