Por qué ?
Porque, una cámara representa una vista de proyección.
Pero en el caso de la cámara 3D (cámara virtual), la cámara se mueve en lugar del mundo. He hecho una explicación detallada más adelante de esta respuesta.
Entendiendo Matemáticamente
La Vista de proyección se mueve por el espacio y cambia su orientación. Lo primero que debe notar es que la proyección deseada en la pantalla no cambia con la dirección de la vista.
Por esta razón, transformamos otras cosas para obtener la proyección deseada.
Entendiendo de http://opengl.org
Para dar la apariencia de mover la cámara, su aplicación OpenGL debe mover la escena con el inverso de la transformación de la cámara. en lo que respecta a OpenGL, no hay cámara. Más específicamente, la cámara siempre se encuentra en la coordenada del espacio ocular (0, 0, 0)
Entendiendo de http://open.gl
También quiero compartir las siguientes líneas de la parte Ver matriz de http://open.gl/transformations
Para simular una transformación de cámara, en realidad tienes que transformar el mundo con el inverso de esa transformación. Ejemplo: si desea mover la cámara hacia arriba, debe mover el mundo hacia abajo.
Comprensión por perspectiva
En el mundo real, vemos las cosas de una manera que se llama "perspectiva".
La perspectiva se refiere al concepto de que los objetos que están más lejos parecen ser más pequeños que los que están más cerca de usted. La perspectiva también significa que si está sentado en medio de una carretera recta, verá los bordes de la carretera como dos líneas convergentes.
Eso es perspectiva. La perspectiva es crítica en proyectos 3D. Sin perspectiva, el mundo 3D no parece real.
Si bien esto puede parecer natural y obvio, es importante tener en cuenta que cuando crea una representación 3D en una computadora está intentando simular un mundo 3D en la pantalla de la computadora, que es una superficie 2D.
Imagine que detrás de la pantalla de la computadora hay una especie de escena 3D real, y la está viendo a través del "cristal" de la pantalla de su computadora. Usando la perspectiva, su objetivo es crear un código que represente lo que se "proyecta" en este "cristal" de su pantalla como si hubiera un mundo 3D real detrás de la pantalla. La única advertencia es que este mundo 3D no es real ... es solo una simulación matemática de un mundo 3D.
Entonces, cuando se usa la representación 3D para simular una escena en 3D y luego se proyecta la escena 3D en la superficie 2D de la pantalla, el proceso se llama proyección en perspectiva.
Comience visualizando intuitivamente lo que desea lograr. Si un objeto está más cerca del espectador, el objeto debe parecer más grande. Si el objeto está más lejos, debe parecer más pequeño. Además, si un objeto se aleja del espectador, en línea recta, desea que converja hacia el centro de la pantalla, ya que se aleja más en la distancia.
Traduciendo la perspectiva a las matemáticas
Mientras observa la ilustración en la siguiente figura, imagine que un objeto se coloca en su escena 3D. En el mundo 3D, la posición del objeto puede describirse como xW, yW, zW, refiriéndose a un sistema de coordenadas 3D con el origen en el punto del ojo. Ahí es donde realmente se coloca el objeto, en la escena 3D más allá de la pantalla.
A medida que el espectador mira este objeto en la pantalla, el objeto 3D se "proyecta" en una posición 2D descrita como xP e yP, que hace referencia al sistema de coordenadas 2D de la pantalla (plano de proyección).
Para poner estos valores en una fórmula matemática, usaré un sistema de coordenadas 3D para las coordenadas mundiales, donde el eje x apunta a la derecha, y apunta hacia arriba y puntos z positivos dentro de la pantalla. El origen 3D se refiere a la ubicación del ojo del espectador. Entonces, el vidrio de la pantalla está en un plano ortogonal (en ángulo recto) al eje z, en algún z que llamaré zProj.
Puede calcular las posiciones proyectadas xP e yP, dividiendo las posiciones mundiales xW e yW, por zW, de esta manera:
xP = K1 * xW / zW
yP = K2 * yW / zW
K1 y K2 son constantes que se derivan de factores geométricos como la relación de aspecto de su plano de proyección (su ventana de visualización) y el "campo de visión" de su ojo, que tiene en cuenta el grado de visión gran angular.
Puedes ver cómo esta transformación simula la perspectiva. Los puntos cerca de los lados de la pantalla se empujan hacia el centro a medida que aumenta la distancia desde el ojo (zW). Al mismo tiempo, los puntos más cercanos al centro (0,0) se ven mucho menos afectados por la distancia desde el ojo y permanecen cerca del centro.
Esta división por z es la famosa "división de perspectiva".
Ahora, considere que un objeto en la escena 3D se define como una serie de vértices. Entonces, al aplicar este tipo de transformación a todos los vértices de la geometría, efectivamente se asegura de que el objeto se encoja cuando esté más alejado del punto del ojo.
Otros casos importantes
- En el caso de la cámara 3D (cámara virtual), la cámara se mueve en lugar del mundo.
Para comprender mejor las cámaras 3D, imagine que está filmando una película. Debes configurar una escena que quieras fotografiar y necesitas una cámara. Para obtener el metraje, recorrerá la escena con su cámara, disparando los objetos en la escena desde diferentes ángulos y puntos de vista.
El mismo proceso de filmación ocurre con una cámara 3D. Necesita una cámara "virtual", que puede recorrer la escena "virtual" que ha creado.
Dos estilos de disparo populares implican mirar el mundo a través de los ojos de un personaje (también conocido como cámara en primera persona) o apuntar la cámara a un personaje y mantenerlo a la vista (conocido como cámara en tercera persona).
Esta es la premisa básica de una cámara 3D: una cámara virtual que puede usar para recorrer una escena 3D y renderizar el metraje desde un punto de vista específico.
Comprender el espacio mundial y ver el espacio
Para codificar este tipo de comportamiento, representará el contenido del mundo 3D desde el punto de vista de la cámara, no solo desde el punto de vista del sistema de coordenadas del mundo, o desde algún otro punto de vista fijo.
En términos generales, una escena 3D contiene un conjunto de modelos 3D. Los modelos se definen como un conjunto de vértices y triángulos, referenciados a su propio sistema de coordenadas. El espacio en el que se definen los modelos se denomina espacio modelo (o local).
Después de colocar los objetos del modelo en una escena 3D, transformará los vértices de estos modelos utilizando una matriz de "transformación del mundo". Cada objeto tiene su propia matriz mundial que define dónde está el objeto en el mundo y cómo está orientado.
Este nuevo sistema de referencia se denomina "espacio mundial" (o espacio global). Una forma sencilla de gestionarlo es asociando una matriz de transformación mundial a cada objeto.
Para implementar el comportamiento de una cámara 3D, deberá realizar pasos adicionales. Hará referencia al mundo, no al origen mundial, sino al sistema de referencia de la cámara 3D.
Una buena estrategia consiste en tratar la cámara como un objeto 3D real en el mundo 3D. Como cualquier otro objeto 3D, utiliza una matriz de "transformación del mundo" para colocar la cámara en la posición y orientación deseadas en el mundo 3D. Esta matriz de transformación del mundo de la cámara transforma el objeto de la cámara desde el original, mirando hacia adelante la rotación (a lo largo del eje z), a la posición del mundo real (xc, yc, zc) y la rotación del mundo.
La siguiente figura muestra las relaciones entre el sistema de coordenadas Mundo (x, y, z) y el sistema de coordenadas Vista (cámara) (x ', y', z ').