Matriz de proyección

Traté de entender las matemáticas detrás de la matriz de proyección y encontré consulta en esta página. La matriz de esta página:

Matrix

Encontré que esta matriz es similar a la matriz de Xna.

Entendí cómo llegaron a las columnas m33 y m44 de la matriz, pero ¿cómo llegaron a m11 y m22? Y no entendí por qué tengo que dar la relación de aspecto si ya doy el ángulo del campo de visión.

Lo último que quiero saber es: ¿cuál es la ecuación para pasar del espacio ndc al espacio de ventana y cómo llegan a esta ecuación?

preguntado el 10 de marzo de 12 a las 12:03

el enlace de la imagen de la matriz de proyección es este: medialab.di.unipi.it/web/IUM/Waterloo/img284.gif -

¿Esta respuesta podría ayudar? stackoverflow.com/questions/28286057/… -

2 Respuestas

El FOV sería suficiente si las pantallas fueran redondas... pero son rectangulares, por lo que solo el FOV no es suficiente. El FOV está configurado para la altura de la pantalla y el otro es el FOV multiplicado por la relación entre el ancho y la altura de la pantalla.

Se puede pensar en m11 como una forma de escalar el FOV en la dirección del ancho. Se puede pensar que m22 es una forma de escalar el FOV en la dirección de la altura.

respondido 10 mar '12, 17:03

Gracias por la respuesta rápida, pero la escala para el ajuste de la ventana se realiza cuando se transfiere al espacio de la ventana y se multiplica cada x,y por esta ecuación: 'xwin = (xndc + 1) * ancho * 0.5 + x ywin = (yndc + 1 ) * altura * 0.5 + y' - solo nadie

no, ese código se parece a lo que usaría para convertir un componente de posición (en un espacio de -1 a +1, salida de WVP después de considerar el FOV) a la posición de la pantalla según las dimensiones de la pantalla y también proporciona un cambio de traducción para colocar la referencia de origen en la parte superior izquierda esquina. Eso no tiene nada que ver con la diferencia de FOV en las direcciones X e Y. Por lo general, ese cálculo que acaba de mostrar se realiza por usted en la canalización de GPU entre el sombreador de vértices y el sombreador de píxeles, ya que su dispositivo gráfico conoce las dimensiones de su ventana gráfica. ¿Está determinando manualmente las posiciones de la pantalla 2d de las ubicaciones 3d? - Steve H

No, solo estoy tratando de entender cómo funciona la "matriz de proyección". Cuando entendemos algo, es más fácil trabajar con él. mi pregunta es ¿por qué necesito escalar la x si ya está hecho cuando nos transformamos en la posición de la pantalla? solo nadie

La matriz de proyección no conoce las dimensiones de su ventana gráfica (ancho y alto en píxeles) (solo conoce la relación de aspecto de su ventana gráfica) cuando transforma una posición 3D en una posición de pantalla 2D. Entonces... muestra una posición de pantalla de 0 a 1 (0 para izquierda o arriba, 1 para derecha o abajo). La salida puede ser como (0.25687, 0.67852). Esto es como ~25% a la derecha desde el borde izquierdo y ~67% hacia abajo de la pantalla desde la parte superior. Todo lo que hace el código desde su primer comentario es traducirlo a la posición de píxel real para su ventana gráfica particular. Pero antes de todo eso... continúa en el siguiente comentario - Steve H

Pero antes de todo eso, para llegar a ese resultado inicial, necesita saber la relación entre ancho y alto de su ventana gráfica cuadrada para que pueda obtener el (0.25687, 0.67852) en primer lugar. La relación de aspecto escala el FOV para que en realidad tenga un FOV más grande en ancho que en alto. (en ventanas típicas que son más anchas que altas). Así que piense en eso como la parte de la matriz de proyección que determina el ancho FOV frente al alto FOV. Si la ventana gráfica fuera redonda y de radio constante, tanto m11 como m22 serían 1. - Steve H

Puede cambiar el campo de visión simplemente escalando las coordenadas x e y resultantes: si las aumenta, obtendrá un campo de visión más pequeño (acercar), si las reduce, obtendrá un campo de visión más grande (alejamiento ). La proyección en perspectiva utilizada en el software 3D es rectilínea, por lo que si su campo de visión es lo suficientemente grande, la distorsión en los bordes será severa y no podrá tener más de 180° de campo de visión.

Necesita la relación de aspecto, porque las coordenadas del clip en OpenGL y Direct3D van de -1 a 1. En dirección horizontal, -1 es la izquierda, 1 es la derecha. En la dirección vertical -1 es la parte inferior, 1 es la parte superior. Entonces, si desea que sus cuadrados realmente aparezcan como un cuadrado, deberá reducir la coordenada X con la relación de aspecto.

Respondido el 10 de diciembre de 13 a las 11:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.