La cámara en OpenGL

9
Por lo general, se tendrán muchos objetos con coordenadas geométricas especificadas de forma independiente. Estos deben ser transformado (trasladado, escalado, y orientado) en la escena. Entonces, la escena en sí tiene que ser visto desde una ubicación particular, la dirección, la escala y la orientación. Visualización Si mostramos típicamente coordenadas de un modelo directamente en nuestro dispositivo de despliegue, probablemente no veremos nada. El rango de coordenadas en el modelo ( -100 a 100 metros) no coincide con el rango de coordenadas de nuestro dispositivo de pantalla (0 a 1.919 píxeles) y sería molesto limitarnos a las coordenadas que coincidan. Además, queremos ver el modelo desde diferentes lugares, direcciones, y perspectivas. Fundamentalmente, la pantalla es un rectángulo plano bidimensional, mientras que nuestro modelo contiene geometría tridimensional extendida. Aquí se mostrará cómo proyectar coordenadas tridimensionales de nuestro modelo en las coordenadas de la pantalla de dos dimensiones fijas. Las herramientas clave para la proyección de tres dimensiones a dos son un modelo de visualización, uso de coordenadas homogéneas, la aplicación de transformaciones lineales mediante la multiplicación de matrices, y la creación de una cartografía de la vista. Estas herramientas están cada discuten en detalle a continuación. Modelo de Vista Por el momento, es importante seguir pensando en términos de coordenadas tridimensionales al tiempo que muchas de las decisiones que determinan lo que se dibuja en la pantalla. Es demasiado pronto para empezar a pensar en que es necesario elaborar píxeles. En su lugar, tratar de visualizar el espacio tridimensional. Es más tarde, una vez que finalicen las transformaciones de visión, después de que los sujetos de este capítulo, que los píxeles entrarán en la discusión. Modelo de Cámara

description

Cámara, modelos de vista y matrices de transoformacion en OpenGL

Transcript of La cámara en OpenGL

Page 1: La cámara en OpenGL

Por lo general, se tendrán muchos objetos con coordenadas geométricas especificadas de forma independiente. Estos deben ser transformado (trasladado, escalado, y orientado) en la escena. Entonces, la escena en sí tiene que ser visto desde una ubicación particular, la dirección, la escala y la orientación.

Visualización

Si mostramos típicamente coordenadas de un modelo directamente en nuestro dispositivo de despliegue, probablemente no veremos nada. El rango de coordenadas en el modelo ( -100 a 100 metros) no coincide con el rango de coordenadas de nuestro dispositivo de pantalla (0 a 1.919 píxeles) y sería molesto limitarnos a las coordenadas que coincidan.Además, queremos ver el modelo desde diferentes lugares, direcciones, y perspectivas. Fundamentalmente, la pantalla es un rectángulo plano bidimensional, mientras que nuestro modelo contiene geometría tridimensional extendida. Aquí se mostrará cómo proyectar coordenadas tridimensionales de nuestro modelo en las coordenadas de la pantalla de dos dimensiones fijas.Las herramientas clave para la proyección de tres dimensiones a dos son un modelo de visualización, uso de coordenadas homogéneas, la aplicación de transformaciones lineales mediante la multiplicación de matrices, y la creación de una cartografía de la vista. Estas herramientas están cada discuten en detalle a continuación.

Modelo de Vista

Por el momento, es importante seguir pensando en términos de coordenadas tridimensionales al tiempo que muchas de las decisiones que determinan lo que se dibuja en la pantalla. Es demasiado pronto para empezar a pensar en que es necesario elaborar píxeles. En su lugar, tratar de visualizar el espacio tridimensional. Es más tarde, una vez que finalicen las transformaciones de visión, después de que los sujetos de este capítulo, que los píxeles entrarán en la discusión.

Modelo de Cámara

El proceso de transformación común para la producción de la vista deseada es análoga a la de tomar una fotografía con una cámara. Como se muestra en la Figura 5.1 los pasos con una cámara (o un ordenador) que podría ser la siguiente:

Page 2: La cámara en OpenGL

1. Mueva la cámara a la ubicación que desee para disparar desde y señalar la dirección deseada de la cámara. (la transformación de visualización)

2. Mueva el sujeto a fotografiar en la ubicación deseada en la escena (transformación de modelado).

3. Elija una lente de la cámara o ajuste el zoom (transformación de proyección).4. Tome la fotografía (aplicar las transformaciones).5. estirar o encoger la imagen resultante con el tamaño de imagen deseado (transformación

de visualización). Para los gráficos en 3D, esto también incluye estiramiento o encogimiento de la profundidad (escala de profundidad de gama). Esto no se debe confundir con el Paso 3, que selecciona qué parte de la escena a capturar, no cuánto para estirar el resultado.

Observemos que los pasos 1 y 2 se puede considerar lo mismo, pero en direcciones opuestas. Se puede dejar la cámara en un punto y traer la escena en frente de ella, o dejar la escena en un punto y mover la cámara hacia el sujeto. Mover la cámara a la izquierda es el mismo que mover el objeto a la derecha. Girar la cámara hacia la derecha es el mismo que el sujeto gire en sentido antihorario. Realmente depende década quien, qué movimientos se realizan como parte de la Paso 1, y el resto pertenecen al Paso 2. Debido a esto, estos dos pasos son normalmente agrupados transformación del modelo de vista. Sin embargo, siempre consistirá en una secuencia de movimientos (Translaciones), rotaciones y escalamientos. La característica definitoria de esta combinación es en la fabricación de un espacio único y unificado para todos los objetos reunidos en un solo lugar para ver, o espacio de ojo.

En OpenGL, nosotros somos responsables de hacer los pasos 1 a 3 anteriores mediante shaders. Es decir, se requiere entregar coordenadas con el modelo de vista y las transformaciones de proyección previamente calculadas. También debemos decirle a OpenGL cómo hacer la transformación de visualización para el Paso 5.La Figura 5.2 resume los sistemas de coordenadas requeridas por OpenGL para el proceso completo. Hasta ahora, hemos hablado de la segunda caja (trasformaciones de usuario), pero

Page 3: La cámara en OpenGL

estamos mostrando el resto a establecer el contexto de toda la pila de visualización, terminando con la forma de especificar su rango de visualización y profundidad a OpenGL. Las coordenadas definitivas dictadas a OpenGL para el recorte y la rasterización son coordenadas homogéneas normalizadas. Es decir, las coordenadas que se pueden extraer estará en el rango [-1,0, 1,0] hasta las escala OpenGL para ajustarse a la ventana.

El paso 3 nos muestra una analogía de elegir un lente de la cámara con la que tomaremos la fotografía. Selecciona que tan estrecho o ancho es el cono rectangular a través del que se capturará la escena. Sólo la geometría comprendida en este cono estará presente en la imagen final. Al mismo tiempo, el Paso 3 también producirá la información necesaria (en el cuarto homogénea de coordenadas, w) para después crear el efecto escorzo de la perspectiva.

OpenGL excluirá además, la geometría que está demasiado cerca o demasiado lejos; es decir, aquellos en frente de un plano o cerca de los que están detrás de un plano lejano. No hay ninguna contrapartida de este en la analogía de la cámara (aparte de la limpieza objetos extraños dentro de su objetivo), pero es útil en una variedad de maneras. Lo más importante, objetos que se aproximan vértice del cono aparecen infinitamente grande, que causa problemas, especialmente si se deben alcanzar el ápice. En el otro extremo de este espectro, objetos muy lejanos que se pueden extraer de la escena están mejor excluidos por razones de rendimiento y algunas razones de precisión profundidad, así, si la profundidad debe abarcar demasiado grande la distancia.

Por lo tanto, tenemos dos planos adicionales que se intersectan con los cuatro planos del cono de visión rectangular. Como se muestra en la Figura 5.4, estos seis planos definen un volumen de visualización de forma troncocónica.

Page 4: La cámara en OpenGL

Modelo de Vista Ortográfica A veces, no se desea una vista en perspectiva y una vista ortográfica se utiliza en su lugar. Este tipo de proyección es utilizado por aplicaciones de planos arquitectónicos y de diseño asistido por computadora, donde es crucial para mantener los tamaños reales de los objetos y los ángulos entre ellos a medida que se proyectan. Esto podría hacerse simplemente haciendo caso omiso de uno de los ejes X, Y, o coordenadas z, dejando que los otros dos coordenadas dan ubicaciones de dos dimensiones. Se podría hacer eso, por supuesto, después de la orientación de los objetos y la escena con las trasformaciones del modelo de vista, como con el modelo de la cámara. Pero al final, todavía se tendrá que localizar y escalar el modelo resultante para la visualización en coordenadas de dispositivos normalizados. La transformación de esto es la última que se da en la siguiente sección.

Las etapas del canal de renderizado que transforman las coordenadas tridimensionales para visualización OpenGL se muestran en la Figura 5.5. Esencialmente, son las etapas programables que comparezcan ante la rasterización. Debido a que estas etapas son programables, por tanto tenemos una gran flexibilidad en la forma inicial de sus coordenadas y en cómo puede transformarlas. Sin embargo, estamos obligados a terminar con las etapas fijas (no programables) posteriores necesarias. Es decir, tendremos que hacer coordenadas homogéneas que están listos para la división perspectiva (también conocida como las coordenadas de recorte). Lo que esto significa y cómo hacerlo son los temas de las siguientes secciones.

Cada uno de los modelos de vista (pasos anteriores) se llaman como una transformación. Son todas las transformaciones lineales que se pueden lograr a través de la multiplicación de matrices

Page 5: La cámara en OpenGL

en coordenadas homogéneas. La próxima multiplicación de matrices y coordinar las secciones homogéneas dan refrescos sobre estos temas. La comprensión de ellos es la clave para entender realmente cómo funcionan las transformaciones OpenGL.

En un shader, transformando un vértice por una matriz es la siguiente:

#version 330 coreuniform mat4 Transform; // se mantiene igual durante muchos vértices

// (granularidad primitivo) in vec4 Vertex; // por cada vértices se envían datos

// shader está corriendovoid main(){gl_Position = Transform * Vertex;}

Transformaciones lineales son componibles; lo que sólo porque nuestra analogía cámara necesitó cuatro pasos de transformación no significa que tenemos que transformar nuestros datos cuatro veces. Más bien, todas esas transformaciones se pueden componer en una única transformación. Si queremos transformar nuestro modelo por primera vez por la matriz de transformación A seguido de matriz de transformación B, veremos qué podemos hacerlo con matriz de transformación C, donde

C=AB(Debido a que estamos mostrando ejemplos de la multiplicación de matrices con el vértice de la derecha y la matriz de la izquierda, la composición de transformaciones aparecen en orden inverso: B se aplica al resultado de la aplicación de un a un vértice los detalles detrás de esta se explican en. la próxima actualización.)Por lo tanto, la buena noticia es que podemos colapsar cualquier número de transformaciones lineales en una sola matriz que se multiplican, lo que permite la libertad de pensar en términos de las medidas que sean más convenientes.

Actualización y Multiplicación de Matrices

Para nuestro uso, matrices y multiplicación de matrices no son más que un mecanismo conveniente para expresar transformaciones lineales, que a su vez son una forma útil de hacer las manipulaciones de coordenadas necesarias para la visualización de modelos. El mecanismo de la matriz fundamental se explica aquí, mientras usos interesantes para que se van a plantear en numerosos lugares en los debates posteriores.En primer lugar, una definición. Una matriz de 4 × 4 tiene un vector de cuatro componentes de otro vector de cuatro componentes a través de la multiplicación por la siguiente regla:

Page 6: La cámara en OpenGL

Algunas observaciones: Cada componente del nuevo vector es una función lineal de todos los componentes de la

antigua vector, de ahí la necesidad de 16 valores en la matriz. La multiplicación siempre toma el vector (0, 0, 0, 0) a (0, 0, 0, 0). Esto es característico de

las transformaciones lineales y muestra que si se trataba de un 3 × 3 veces de matriz un vector de tres componentes, ¿por qué la traducción (en movimiento) no se puede hacer con una matriz se multiplican. Veremos cómo traducir un vector de tres componentes se hace posible con una matriz de 4 × 4 y coordenadas homogéneas.

En nuestros modelos de vista, vamos a querer tener un vector a través de múltiples transformaciones, aquí expresamos como multiplicaciones de matrices de matrices A y B:

Y nosotros queremos hacer esto de manera eficiente mediante la búsqueda de una matriz C tal que:

Donde

Debemos tomar la trasformación B y la trasformación A y generar una sola trasformación C es un beneficio que obtenemos por pegar a las transformaciones lineales. La siguiente definición de multiplicación de la matriz resume este trabajo.

Donde

Esto es

Page 7: La cámara en OpenGL

La multiplicación de matrices no es conmutativa, hablando en términos generales de la multiplicación de matrices A y B

Y, en general, al multiplicar la matriz A y el vector v

Así que hay que tener cuidado a multiplicarse en el orden correcto. La multiplicación de matrices es, afortunadamente, asociativa:

Este es un resultado clave vamos a aprovechar para mejorar el rendimiento.

Matrices y Transformaciones Lineales

Comenzamos nuestra tarea de mapeo en coordenadas de dispositivos mediante la adición de un cuarto componente a nuestras coordenadas cartesianas tridimensionales, con un valor de 1.0, para hacer coordenadas homogéneas. Estas coordenadas entonces estarán listas para ser multiplicadas por una o más matrices de 4 × 4 rotar, escalar, trasladar y aplicar perspectiva. A continuación se dan ejemplos de cómo utilizar cada una de estas transformaciones. E4 × 4l resumen es que cada una de estas transformaciones se pueden realizar a través de la multiplicación por una matriz de 4 × 4, y una serie de tales transformaciones puede estar compuesto en una sola matriz 4 × 4, una vez, que entonces se puede utilizar en múltiples vértices.