Acerca de la transformación de coordenadas de modelos 3D
sustancia
En primer lugar
A menudo se pueden ver imágenes en 3D en las pantallas de los televisores y en los juegos, pero ¿cómo se muestran los objetos que existen en el espacio 3D, como los personajes y los edificios que se mueven en la pantalla, en una pantalla 2D?
En los juegos 2D, solo hay elementos bidimensionales de "X e Y" como valores de coordenadas, y la pantalla también es 2D, por lo que si dibuja un objeto especificando la posición de coordenadas de X e Y, comprenderá intuitivamente cómo se dibujará en qué posición.
Sin embargo, en 3D, no es tan fácil. Como su nombre indica, el 3D es de "3 dimensiones" y tiene tres coordenadas de información: "X, Y y Z". Dado que las coordenadas son diferentes de la visualización 2D, no es posible dibujar el objeto tal cual.
Entonces, lo que hay que hacer es "convertir la información tridimensional en información bidimensional". Esto se conoce comúnmente como "transformación de coordenadas". Ten en cuenta que esta transformación de coordenadas es esencial para la programación 3D.
Hay varios tipos de transformaciones de coordenadas para convertir 3D a 2D, pero hay tres tipos principales de transformaciones de coordenadas que los programadores manejan: "transformación del mundo", "transformación de vista" y "transformación de proyección". A continuación, explicaremos todo lo relacionado con la transformación de coordenadas.
Sistemas de coordenadas para zurdos y diestros
En 3D, hay dos sistemas de coordenadas, el "sistema de coordenadas a la izquierda" y el "sistema de coordenadas a la derecha", que tienen diferentes orientaciones para cada coordenada, como se muestra en la figura a continuación.
Direct3D usaba principalmente un sistema de coordenadas para diestros, pero también hay funciones para calcular sistemas de coordenadas para diestros. Sin embargo, XNA solo proporciona métodos de cálculo para sistemas de coordenadas dextrógiros. Esto parece estar en línea con el hecho de que otras aplicaciones a menudo usan sistemas de coordenadas dextrógiros.
Todos los consejos de XNA en este sitio usan el sistema de coordenadas para diestros.
Sistema de coordenadas local (sistema de coordenadas del modelo)
Cada modelo tiene un sistema de coordenadas centrado en el origen. A la hora de crear un modelo con software de modelado, creo que es más fácil de entender si te imaginas creándolo con el origen como centro.
Sistema de coordenadas mundiales
El sistema de coordenadas mundiales le permite colocar el modelo en cualquier lugar. Si no hace nada en esta transformación del mundo, el modelo se colocará en el origen de la misma manera que las coordenadas locales. La colocación no es solo para moverse desde el origen, sino también para rotar y escalar.
Ver sistema de coordenadas
Una vez que haya colocado el modelo en coordenadas universales, necesitará información sobre dónde está mirando y dónde está mirando el espacio 3D. Esto es lo que llamamos "transformaciones de vista". Por lo general, las transformaciones de vista se representan a menudo como cámaras.
Los parámetros necesarios para esta conversión son "posición de la cámara", "punto de interés de la cámara" y "dirección ascendente de la cámara". La orientación de la cámara viene determinada por estos tres parámetros. La siguiente figura muestra la cámara desde la perspectiva de un tercero.
La siguiente figura se ve realmente desde el punto de vista de la cámara con la disposición que se muestra en la figura anterior (en este punto, aún no hemos convertido las coordenadas a la pantalla, por lo que es solo una imagen).
En la explicación anterior, parece que la cámara se posiciona y las coordenadas se transforman, pero en el cálculo real, las coordenadas del mundo se convierten de acuerdo con la posición y orientación de la cámara. Por lo tanto, el origen es la posición de la cámara como se muestra en la siguiente figura.
Sistema de coordenadas proyectivas
Una vez que haya decidido desde qué posición ver el espacio 3D, el siguiente paso es procesar la visualización de "objetos pequeños que están lejos" y "cosas grandes que están cerca". A esto se le llama transformación proyectiva. Hay dos métodos de transformación de proyección, "proyección en perspectiva" y "proyección ortográfica", pero la imagen de "proyección en perspectiva" comúnmente utilizada es la siguiente.
La proyección en perspectiva utiliza los siguientes parámetros: Ángulo de visión, Relación de aspecto, Posición del clip hacia adelante y Posición del clip hacia atrás. El área etiquetada como "frustum" en la figura de arriba finalmente aparecerá en la pantalla.
"Ángulo de visión" especifica el rango de visión visible desde la cámara. Al disminuir el ángulo se acerca, al aumentarlo, se aleja. El ángulo de visión será el valor vertical del frustum.
La relación de aspecto se utiliza para determinar el ángulo de visión horizontal, mientras que el ángulo de visión es un ángulo vertical. El ángulo horizontal generalmente está determinado por el "ángulo de visión × relación de aspecto", y la relación de aspecto es básicamente el valor del "ancho ÷ alto" de la pantalla que está tratando de mostrar. Si cambia este valor, el objeto 3D mostrado parecerá estirarse horizontal o verticalmente.
La posición del clip hacia adelante y la posición del clip trasero se especifican para determinar si el objeto se muestra en el rango delantero o trasero. Debido a la naturaleza del ordenador, no es posible mostrar hasta el infinito, por lo que estableceremos un límite. Este valor también afecta a la precisión del búfer Z, por lo que no se recomienda incluirlo en el área de dibujo más allá del rango que no es necesario mostrar.
El objeto transformado en perspectiva se convierte en un espacio como el que se muestra a continuación. Los objetos que estaban cerca de la cámara se amplían y los objetos que estaban lejos se reducen.
Esto se ilustra en un diagrama fácil de entender a continuación.
Si lo miras desde el punto de vista de la cámara, se ve como abajo.
Otro método de transformación proyectiva es la proyección ortográfica, que proyecta un área visible como la que se muestra a continuación. Dado que la anchura y la altura son constantes independientemente de la profundidad, el tamaño del objeto no cambia con la profundidad.
Sistema de coordenadas de pantalla
Después de la transformación de la proyección, se convierte a las coordenadas de la pantalla real. Aunque se trate de una pantalla, la posición y el alcance de la pantalla cambian en función de la configuración de la ventana gráfica establecida en el dispositivo. Sin embargo, en el caso de los juegos, las coordenadas del cliente de la ventana suelen ser la ventana gráfica tal cual, por lo que no creo que debas preocuparte demasiado.
Las coordenadas de la pantalla (0, 0) se convierten a partir de las coordenadas de proyección (-1, 1, z). Del mismo modo, las coordenadas de la pantalla (ancho, alto) se convierten a partir de las coordenadas de proyección (1, -1 ,z).