Tarea 4. Visión activa

Oliver Fernando Cuate González

ocuate@computacion.cs.cinvestav.mx

07 de Noviembre de 2013


Problema

Activar la visión activa para la escena de la Tarea 3.


Marco Teórico

Visión Estereoscópica: Se refiere a la percepción de profundidad, esto es lo que nos permite ver en 3D. Este tipo de visión se da de forma natural para nosotros, ya que la posición y separación de los ojos permite tener dos imágenes, ligeramente distintas, para cada ojo, que el cerebro combina después de forma automática para generar una percepción de volumen y distancia. Algunos parámetros imporantes que nos permiten este tipo de visión son:

Para poder tener una visión estereoscópca de un objeto dibujado en una pantalla, debería de ser posible emular las características antes mencionadas. En las tareas anteriores hemos controlado la superposicón de los objetos, el campo de visión, la perspectiva y la iluminación.

Visión Activa: Es una ténica utilizada para desplegar escenas en tres dimensiones. Esta técnica se refiere al multiplexado en tiempo, es decir, el intercambio coordinado de imagenes para cada ojo, dicho cambio debe ser rápido y sincronizado para que cada ojo vea la imagen apropiada correctamente. El uso de este proceso requiere de tecnología especial. Se utilizan lentes obturadores (shutter glasses) que se sincronizan con las imágenes mostradas en la pantalla bloqueando un ojo cada determinado tiempo para que cada ojo vea únicamente la imagen apropiada. el equipo utilizado es el siguiente:

la siguiente figura ilustra la visión activa.

Perspective


Análisis

Las transformaciones realizadas para que el cuadricóptero tenga los movimientos deseados serán las mismas que en la Tarea 3. La variación será incluir los elementos necesarios para la visón en estéreo.

Se debe definir la separación ocular y la perspectiva deseada para poder utilizar un método conocido como “off-axis” en el que las imágenes generadas para cada ojo dependen de la posición de la cámara y la alineación. Lo que se debe hacer es hay que cambiar ligeramente la perspectiva de la escena (según la separación ocular) manteniendo paralelos los vectores para cada cámara.

A continuación se describe la forma de realizar lo anterior con Qt y OpenGL.


Alternativa de Solución en Qt y OpenGL

Qt y OpenGL permiten trabajar con visión estereoscópica. Lo que se debe hacer es definir una clase con estas características utlizando los parámetros:

QGLFormat fmt;

fmt.setStereo( TRUE );

Por otro lado, para tener un control de las imágenes que se muestran al ojo izquierdo y al ojo derecho se utlizan dos buffers, uno para cada ojo. En OpenGl esto se hace, respectivamente, con: GL_BACK_LEFT y GL_BACK_RIGHT

Para pintar un buffer se usa: glDrawBuffer( BUFFER );

Y se limpia con: glClear(GL COLOR BUFFER BIT | GL DEPTH BUFFER BIT);

Para definir la perspectiva que tendrá cada imagen se debe definir la separación ocular. Debido a la forma de realizar los cálculos con estos elementos, se utiliza la función glFrustrum() en lugar de glPerspective() como se venía realizando, la siguiente figura muestra como se utiliza glFrustrum().

Perspective

Hay que definir además algunas operaciones con vectores como el producto cruz y la normalización de vectores.

Se agrega para la parte de la aplicación un nuevo witget, se trata de un botón para activar o desactivar la visión estereoscópica.

Los controles referidos al manejo del cuadricóptero, la iluminación y la posición de la cámara se mantienen igual que en la tarea anterior.

Estos son los detalles a grandes rasgos de la implementación. Por último se agregan un par de imágenes con diferente perspectiva y el link de descarga del código fuente del programa:

vista1 vista2

vista3

Descargar Archivo


Bibliografía

Mecate Zambrano Miriam. Interacción con Objetos Deformables. Tesis de maestría, CINVESTAV Departamento de Computación, México, D.F., Noviembre 2008.