lunes, 12 de mayo de 2014

Perspectiva: proyectando objetos en Realidad Aumentada

La Perspectiva es un modelo de proyección que consigue efecto distancia al quedar representados los objetos más alejados con un menor tamaño. En esta entrada, trataré de explicar cómo se realiza la transformación de proyección en perspectiva en el ámbito de la Realidad Aumentada para obtener escenas más realistas, simulando la manera en que el ojo humano y las cámaras físicas forman imágenes. 



El modelo de proyección en perspectiva consiste en la proyección de los vértices de los objetos de la escena mediante trayectorias convergentes en un punto central del plano de proyección. Se consigue así un efecto distancia ya que los objetos situados más distantes del plano de visualización aparezcan más pequeños en la imagen. Las escenas generadas utilizando este modelo de proyección son más realistas, ya que ésta es la manera en que el ojo humano y las cámaras físicas forman imágenes.

perspectiva simple
matriz perspectiva
Perspectiva simple y matriz de proyección

Siguiendo la idea de la cámara estenopeica, desplazamos el plano de visualización una distancia d por detrás del origen (en dirección -Z). De esta forma, según la proyección simple, cada punto p se proyecta en el plano de visualización situado en z = -d obteniendo el punto p'=(px',py',-d). Aplicando semejanza de triángulos y un parámetro de homogeneización h = -pz/d, obtenemos la matriz de proyección Mp, que nos aplasta los vértices de los objetos 3D sobre el plano de visualización 2D.

Esta proceso no puede deshacerse; no tiene inverso. Por este motivo es interesante proyectar en lugar de sobre un plano, sobre una pirámide truncada (lo mas estrecha posible) que, una vez normalizada, se convertirá en un cubo unitario  (en lugar de un cuadrado de lado 1), que si podrá deshacerse. Así, definimos la pirámide de visualización (frustrum) cuyas bases son paralelas al plano de proyección (que queda definido por los lados top, bottom, left, right y las distancias near y far). La matriz de perspectiva que transforma la pirámide en el cubo unitario será:

frustrum
Frustrum
matriz perspectiva frustrum
Matriz de perspectiva para el frustrum

Para evitar errores de precisión en el Z-Buffer con distancias grandes, conviene que los planos de la pirámide truncada estén cerca (la distancia far-near sea muy pequeño).

Obtenemos así el volumen de visualización normalizado a un cubo unitario y las coordenadas normalizadas. Hemos pasado los objetos de 3D a 2D y las coordenadas Z de los puntos son almacenadas en un Buffer de profundidad (Z-Buffer).

No hay comentarios:

Publicar un comentario