Pregunta

Estoy usando

worldview_inverse * (projection_inverse * vector)

para transformar el espacio de pantalla en coordenadas espaciales mundo. Supuse que

(x,y,1,1)

transformaría a un punto en el plano lejano, mientras que

(x,y,-1,1)

se transforma en un punto en el plano cercano, y la conexión de la línea que puedo consultar todos los objetos en la vista de cono truncado que se cruzan la línea. Después de la transformación divido los puntos resultantes por su respectivo componente .w. Esto funciona para el extremo plano, pero el punto en el plano cerca de algún modo se transforma al origen espacial mundial.

Creo que esto tiene que ver con los componentes de w 1 estoy alimentando a la proyección inversa, porque por lo general es 1 antes de la proyección, no después, y yo estoy haciendo la proyección inversa. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Sé que esto es sólo una solución temporal, pero se puede deducir el punto de avión cerca utilizando sólo el punto a lo largo y la posición de visualización.

near_point = view_position
           + (far_point - view_position) * (near_distance / far_distance)

En cuanto a ti verdadero problema. En primer lugar, no se olvide de dividir por W! También, dependiendo de su matriz de proyección, has (x, y, 0,1) en comparación con z = -1.

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top