Proyección tridimensional
# Proyección tridimensional

La proyección tridimensional se refiere a un conjunto de técnicas para representar un objeto tridimensional en una superficie bidimensional.

Su uso es extendido en dibujo técnico, y es parte fundamental de distintos softwares para la creación de gráficos.

## Proyección ortográfica

Cuando el ojo humano mira una escena, los objetos lejanos parecen más pequeños que los objetos cercanos. La proyección ortográfica ignora este efecto para permitir la creación de dibujos a escala para la construcción y la ingeniería.

Las proyecciones ortogonales son un pequeño conjunto de transformaciones que a menudo se utilizan para mostrar el perfil, el detalle o las medidas precisas de un objeto tridimensional. Los nombres comunes para las proyecciones ortográficas incluyen la planta, las secciones transversales, los planos a vista de pájaro y los distintos sistemas de elevación del volumen.

Si la línea normal al plano de visión (la dirección a la que se dirige la cámara) es paralela a uno de los ejes principales de coordenadas (el eje x, y o z), la transformación matemática toma formas particularmente sencillas. Por ejemplo, para proyectar el punto 3D $a_{x}$, $a_{y}$, $a_{z}$ en el punto 2D $b_{x}$, $b_{y}$ usando una proyección ortográfica paralela al eje y (donde la "y" positiva representa la dirección hacia adelante en el sentido de la vista del perfil), se pueden usar las siguientes ecuaciones:

    $b_{x}=s_{x}a_{x}+c_{x}$
    $b_{y}=s_{z}a_{z}+c_{z}$

donde el vector s es un factor de escala arbitrario, y c es un desplazamiento arbitrario. Estas constantes son opcionales y se pueden usar para alinear correctamente la ventana gráfica. Usando multiplicación de matrices, las ecuaciones se convierten en:

    ${\begin{bmatrix}{b_{x}}\\{b_{y}}\\\end{bmatrix}}={\begin{bmatrix}{s_{x}}&0&0\\0&0&{s_{z}}\\\end{bmatrix}}{\begin{bmatrix}{a_{x}}\\{a_{y}}\\{a_{z}}\\\end{bmatrix}}+{\begin{bmatrix}{c_{x}}\\{c_{z}}\\\end{bmatrix}}$.

Mientras que las imágenes proyectadas ortográficamente representan la naturaleza tridimensional del objeto proyectado, no representan el objeto tal como sería grabado fotográficamente o percibido por un espectador que lo observa directamente. En particular, las longitudes paralelas en todos los puntos de una imagen proyectada ortográficamente son de la misma escala, independientemente de si están muy lejos o cerca del espectador. Como resultado, las longitudes no se acortan como lo estarían en una proyección en perspectiva.

## Proyección en perspectiva débil

Una proyección en perspectiva débil utiliza los mismos principios de una proyección ortográfica, pero requiere que se especifique el factor de escala, asegurando así que los objetos más cercanos parezcan más grandes en la proyección, y viceversa. Se puede ver como un híbrido entre una proyección ortográfica y una perspectiva, y se describe como una proyección en perspectiva con profundidades de puntos individuales $Z_{i}$ reemplazada por una profundidad constante promedio $Z_{med}$, o simplemente como una proyección ortográfica más una escala.

Por lo tanto, el modelo de perspectiva débil aproxima la proyección de perspectiva al usar un modelo más simple, similar a la perspectiva ortográfica pura (sin escala).

Es una aproximación razonable cuando la profundidad del objeto en la línea de visión es pequeña en comparación con la distancia desde la cámara, y el campo de visión es pequeño. Con estas condiciones, se puede suponer que todos los puntos en un objeto 3D están a la misma distancia $Z_{med}$ de la cámara sin errores significativos en la proyección (en comparación con el modelo de perspectiva completo).

Ecuación

    ${\begin{array}{lcl}P_{x}={\frac {X}{Z_{med}}}\\P_{y}={\frac {Y}{Z_{med}}}\end{array}}$

asumiendo longitud focal ${\mathit {f}}=1$.

## Proyección perspectiva

Cuando el ojo humano ve una escena, los objetos lejanos parecen más pequeños que los objetos cercanos. Esto se conoce como perspectiva. Si bien la proyección ortográfica ignora este efecto para permitir mediciones precisas, la proyección en perspectiva muestra los objetos distantes más pequeños para proporcionar realismo a las imágenes generadas.

La proyección en perspectiva requiere una definición más complicada en comparación con las proyecciones ortográficas. Una ayuda conceptual para entender la mecánica de esta proyección es imaginar la proyección en 2D como si los objeto se estuvieran viendo a través del visor de una cámara fotográfica. La posición, orientación y campo de visión de la cámara controlan el comportamiento de la transformación de proyección. Se definen las siguientes variables para describir esta transformación:

* $\mathbf {a} _{x,y,z}$: la posición 3D de un punto A que debe proyectarse.
* $\mathbf {c} _{x,y,z}$: la posición 3D de un punto C que representa la cámara.
* $\mathbf {\theta } _{x,y,z}$: la orientación de la cámara (representada por los ángulos de Euler).
* $\mathbf {e} _{x,y,z}$: la posición del plano de imagen respecto al diafragma de la cámara (situado como ha se ha dicho en C). La mayoría de los criterios de signos para las ecuaciones usan valores de z positivos (el plano está delante del diafragma), sin embargo, los valores de z negativos son físicamente más correctos, pero la imagen se invertirá tanto horizontal como verticalmente.

Esto se traduce en:

* $\mathbf {b} _{x,y}$: la proyección 2D de $\mathbf {a}$.

Cuando $\mathbf {c} _{x,y,z}=\langle 0,0,0\rangle ,$ y $\mathbf {\theta } _{x,y,z}=\langle 0,0,0\rangle ,$ el vector 3D $\langle 1,2,0\rangle$ se proyecta en el vector 2D $\langle 1,2\rangle$.

De otra manera, para calcular $\mathbf {b} _{x,y}$ primero se define un vector $\mathbf {d} _{x,y,z}$ como la posición del punto A con respecto a un sistema de coordenadas definido por la cámara, con origen en C y girado por $\mathbf {\theta }$ con respecto al sistema de coordenadas inicial. Esto se logra con sustrayendo matricialmente el vector $\mathbf {c}$ al vector $\mathbf {a}$ y luego aplicando una rotación por $-\mathbf {\theta }$ al resultado. Esta transformación a menudo se denomina transformación de cámara y se puede formular de la siguiente manera, expresando la rotación en términos de giros sobre los ejes x, y y z ( estos cálculos suponen que los ejes se ordenan como un sistema de ejes con giro a la izquierda):

    ${\begin{bmatrix}\mathbf {d} _{x}\\\mathbf {d} _{y}\\\mathbf {d} _{z}\\\end{bmatrix}}={\begin{bmatrix}1&0&0\\0&{\cos(\mathbf {\theta } _{x})}&{\sin(\mathbf {\theta } _{x})}\\0&{-\sin(\mathbf {\theta } _{x})}&{\cos(\mathbf {\theta } _{x})}\\\end{bmatrix}}{\begin{bmatrix}{\cos(\mathbf {\theta } _{y})}&0&{-\sin(\mathbf {\theta } _{y})}\\0&1&0\\{\sin(\mathbf {\theta } _{y})}&0&{\cos(\mathbf {\theta } _{y})}\\\end{bmatrix}}{\begin{bmatrix}{\cos(\mathbf {\theta } _{z})}&{\sin(\mathbf {\theta } _{z})}&0\\{-\sin(\mathbf {\theta } _{z})}&{\cos(\mathbf {\theta } _{z})}&0\\0&0&1\\\end{bmatrix}}\left({{\begin{bmatrix}\mathbf {a} _{x}\\\mathbf {a} _{y}\\\mathbf {a} _{z}\\\end{bmatrix}}-{\begin{bmatrix}\mathbf {c} _{x}\\\mathbf {c} _{y}\\\mathbf {c} _{z}\\\end{bmatrix}}}\right)$

Esta representación corresponde a girar según los tres ángulos de Euler, usando la convención xyz, que puede interpretarse como "girar sobre los ejes extrínsecos (ejes de la escena) en el orden z, y, x (lectura de derecha a izquierda), o rotar sobre los ejes intrínsecos (ejes de la cámara) en el orden x, y, z (lectura de izquierda a derecha). Téngase en cuenta que si la cámara no se gira ($\mathbf {\theta } _{x,y,z}=\langle 0,0,0\rangle$), entonces las matrices pasan a ser identidades, y esto se reduce a simplemente al cambio: $\mathbf {d} =\mathbf {a} -\mathbf {c} .$

Alternativamente, sin usar matrices (reemplazando $(a_x-c_x)$ por x y análogamente las demás variables, y se abrevia cosθ a c y sinθ por s):

    ${\begin{array}{lcl}\mathbf {d} _{x}=c_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} )-s_{y}\mathbf {z} \\\mathbf {d} _{y}=s_{x}(c_{y}\mathbf {z} +s_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} ))+c_{x}(c_{z}\mathbf {y} -s_{z}\mathbf {x} )\\\mathbf {d} _{z}=c_{x}(c_{y}\mathbf {z} +s_{y}(s_{z}\mathbf {y} +c_{z}\mathbf {x} ))-s_{x}(c_{z}\mathbf {y} -s_{z}\mathbf {x} )\\\end{array}}$

Este punto transformado puede luego proyectarse en el plano 2D usando la fórmula (aquí se usa como plano de proyección x/y, aunque algunos textos también pueden usar x/z):

    ${\begin{array}{lcl}\mathbf {b} _{x}&=&{\frac {\mathbf {e} _{z}}{\mathbf {d} _{z}}}\mathbf {d} _{x}-\mathbf {e} _{x}\\\mathbf {b} _{y}&=&{\frac {\mathbf {e} _{z}}{\mathbf {d} _{z}}}\mathbf {d} _{y}-\mathbf {e} _{y}\\\end{array}}.$

O, en forma de matriz, usando coordenadas homogéneas, el sistema

    ${\begin{bmatrix}\mathbf {f} _{x}\\\mathbf {f} _{y}\\\mathbf {f} _{z}\\\mathbf {f} _{w}\\\end{bmatrix}}={\begin{bmatrix}1&0&-{\frac {\mathbf {e} _{x}}{\mathbf {e} _{z}}}&0\\0&1&-{\frac {\mathbf {e} _{y}}{\mathbf {e} _{z}}}&0\\0&0&1&0\\0&0&-{\frac {1}{\mathbf {e} _{z}}}&1\\\end{bmatrix}}{\begin{bmatrix}\mathbf {d} _{x}\\\mathbf {d} _{y}\\\mathbf {d} _{z}\\1\\\end{bmatrix}}$

junto con un argumento usando triángulos semejantes, lleva a la división por la coordenada homogénea, dando

    ${\begin{array}{lcl}\mathbf {b} _{x}&=&\mathbf {f} _{x}/\mathbf {f} _{w}\\\mathbf {b} _{y}&=&\mathbf {f} _{y}/\mathbf {f} _{w}\\\end{array}}.$

La distancia del visor desde la superficie de visualización, $\mathbf {e} _{z}$, se relaciona directamente con el campo de visión, donde $\alpha =2\cdot \arctan(1/\mathbf {e} _{z})$ es el ángulo visto. (Nota: aquí se supone que se hacen corresponder los puntos (-1, -1) y (1,1) con las esquinas de su superficie de visión)

Las ecuaciones anteriores también pueden reescribirse como:

    ${\begin{array}{lcl}\mathbf {b} _{x}=(\mathbf {d} _{x}\mathbf {s} _{x})/(\mathbf {d} _{z}\mathbf {r} _{x})\mathbf {r} _{z}\\\mathbf {b} _{y}=(\mathbf {d} _{y}\mathbf {s} _{y})/(\mathbf {d} _{z}\mathbf {r} _{y})\mathbf {r} _{z}\\\end{array}}.$

en las que $\mathbf {s} _{x,y}$ es el tamaño de visualización, $\mathbf {r} _{x,y}$ es el tamaño de la superficie que toma la imagen (CCD o película), $\mathbf {r} _{z}$ es la distancia desde la superficie de la película al diafragma (orificio del objetivo de la cámara) y $\mathbf {d} _{z}$ es la distancia desde el punto 3D proyectado al citado diafragma.

Posteriores operaciones de recorte y escalado pueden ser necesarias para situar el plano 2D en cualquier medio de visualización determinado.

## Diagrama

Para determinar qué coordenada x corresponde en la pantalla a un punto $A_{x},A_{z}$, se deben multiplicar las coordenadas del punto por:

    $B_{x}=A_{x}{\frac {B_{z}}{A_{z}}}$

dónde

    $B_{x}$ es la coordenada x de la pantalla
    $A_{x}$ es la coordenada x del modelo
    $B_{z}$ es la distancia focal, la distancia axial entre centro de la cámara y el plano de imagen
    $A_{z}$ es la distancia (medida perpendicularmente al plano de imagen) entre el observador y el punto observado

Debido a que la cámara está en 3D, lo mismo funciona para la coordenada y de la pantalla, sustituyendo y por x en el diagrama y la ecuación de arriba.

