Transformación de proyección
Una transformación de proyección controla los elementos internos de la cámara, como elegir una lente para una cámara. Este es el más complicado de los tres tipos de transformación.
La matriz de proyección suele ser una proyección de escala y perspectiva. La transformación de proyección convierte el frustum de visualización en una forma cuboide. Dado que el extremo cercano del frustum de visualización es menor que el extremo lejano, esto tiene el efecto de expandir objetos que están cerca de la cámara; así es como se aplica la perspectiva a la escena.
En el frustum de visualización, la distancia entre la cámara y el origen del espacio de transformación de visualización se define arbitrariamente como D, por lo que la matriz de proyección es similar a la siguiente ilustración.
La matriz de visualización traduce la cámara al origen traduciéndolo en la dirección z por - D. La matriz de traducción es similar a la siguiente ilustración.
La multiplicación de la matriz de traducción por la matriz de proyección (T*P) proporciona la matriz de proyección compuesta, como se muestra en la ilustración siguiente.
La transformación de perspectiva convierte un frustum de visualización en un nuevo espacio de coordenadas. Observe que el frustum se convierte en cuboid y también que el origen se mueve desde la esquina superior derecha de la escena al centro, como se muestra en el diagrama siguiente.
En la transformación de perspectiva, los límites de las direcciones x e y son -1 y 1. Los límites de la dirección Z son 0 para el plano frontal y 1 para el plano posterior.
Esta matriz traduce y escala objetos en función de una distancia especificada desde la cámara al plano de recorte cercano, pero no tiene en cuenta el campo de vista (fov) y los valores z que produce para los objetos en la distancia pueden ser casi idénticos, lo que dificulta las comparaciones de profundidad. La siguiente matriz soluciona estos problemas y ajusta los vértices para tener en cuenta la relación de aspecto de la ventanilla, lo que lo convierte en una buena opción para la proyección de perspectiva.
En esta matriz, Zn es el valor z del plano de recorte cercano. Las variables w, h y Q tienen los significados siguientes. Tenga en cuenta que fovw y fovk representan los campos horizontales y verticales de la vista de la ventanilla, en radianes.
En el caso de la aplicación, el uso de ángulos de campo de vista para definir los coeficientes de escalado X e Y podría no ser tan conveniente como usar las dimensiones horizontales y verticales de la ventanilla (en el espacio de la cámara). A medida que las matemáticas funcionan, las dos ecuaciones siguientes para w y h usan las dimensiones de la ventanilla y son equivalentes a las ecuaciones anteriores.
En estas fórmulas, Zn representa la posición del plano de recorte cercano y las variables Vw y Vh representan el ancho y alto de la ventanilla, en el espacio de la cámara.
Sea cual sea la fórmula que decida usar, asegúrese de establecer Zn en un valor tan grande como sea posible, ya que los valores z extremadamente cercanos a la cámara no varían mucho. Esto hace comparaciones de profundidad con búferes z de 16 bits algo complicados.
Matriz de proyección compatible con w
Direct3D puede usar el componente w de un vértice transformado por el mundo, la vista y las matrices de proyección para realizar cálculos basados en profundidad en efectos de niebla o búfer de profundidad. Los cálculos como estos requieren que la matriz de proyección normalice w para que sea equivalente a world-space z. En resumen, si la matriz de proyección incluye un coeficiente (3,4) que no es 1, debe escalar todos los coeficientes por el coeficiente inverso de (3,4) para crear una matriz adecuada. Si no proporciona una matriz compatible, los efectos de niebla y el almacenamiento en búfer de profundidad no se aplican correctamente.
En la ilustración siguiente se muestra una matriz de proyección no compatible y la misma matriz escalada para que se habilite la niebla relativa a los ojos.
En las matrices anteriores, se supone que todas las variables no son cero. Para obtener información sobre el almacenamiento en búfer de profundidad basado en w, consulte Búferes de profundidad.
Direct3D usa la matriz de proyección establecida actualmente en sus cálculos de profundidad basados en w. Como resultado, las aplicaciones deben establecer una matriz de proyección compatible para recibir las características basadas en w deseadas, incluso si no usan Direct3D para las transformaciones.
Temas relacionados