Llevo bastante tiempo leyendo sobre el tema, pero todavía no he podido entender muy bien los pasos que hay que dar para componer una matriz de proyección en perspectiva. Alguien puede explicar todas las matrices y sus respectivos trabajos en la composición de una matriz de proyección de perspectiva final?
Respuesta
¿Demasiados anuncios?No estoy familiarizado con esa fórmula de la foto que has proporcionado, pero aquí están mis pensamientos.
Una proyección en perspectiva sobre un plano horizontal $\{z = a\}$ con enfoque $(0,0,0)$ y distancia focal $a$ asigna un punto $(x,y,z)$ a $$P(x,y,z) = \left(\frac{ax}{z}, \frac{ay}{z}, a\right) = \frac az(x,y,z)$$ Verificar que cualquier punto del plano $(x,y,a)$ se asigna a sí misma.
En el espacio proyectivo, dos puntos (excluyendo el propio origen) son equivalentes si están en la misma línea que pasa por el origen; para cualquier número $k \neq 0$ , $$(x,y,z,w) \sim (kx,ky,kz,kw)$$
Por tanto, la proyección es, para cualquier punto del espacio $\{w = 1\}$ , $$P(x,y,z,1) = \left(\frac{ax}{z}, \frac{ay}{z}, a, 1\right) = \frac az\left(x,y,z,\frac za\right) \sim \left(x,y,z,\frac za\right)$$ conversión a notación matricial, $$= \begin{bmatrix} x \\ y \\ z \\ z/a \end{bmatrix} = \begin{bmatrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0&1&0 \\ 0&0&1/a&0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}$$ (Tenga en cuenta que no importa si $w$ es $1$ o cualquier otra cosa, debido a la columna de ceros. No sé si eso es importante aquí).
Así, para una proyección a través del punto $(0,0,0,1)$ en un plano horizontal $\{(x,y,a,1)\}$ la matriz es
$$P = \begin{bmatrix} 1&0&0&0 \\ 0&1&0&0 \\ 0&0&1&0 \\ 0&0&1/a&0 \end{bmatrix}$$
Ahora, para hacer una proyección con cualquier foco y cualquier orientación del plano, sólo tenemos que aplicar traslaciones y rotaciones a lo que ya tenemos. Si el foco es $\vec c$ (y la distancia focal y la orientación son las mismas que antes), entonces la proyección de $\vec x$ es $P(\vec x - \vec c) + \vec c$ .
Del mismo modo, si la orientación del plano es diferente, de modo que el vector normal es $R(0,0,1)$ para alguna matriz de rotación $R$ (y el enfoque es $(0,0,0)$ ), entonces la proyección es $RP(R^{-1}\vec x)$ .
Si el enfoque y la orientación son diferentes, las fórmulas anteriores se combinan en $RP(R^{-1}(\vec x - \vec c)) + \vec c$ .
Pero esta es una fórmula 3D. En 4D, la traslación puede representarse mediante una matriz
$$T = \begin{bmatrix} 1&0&0&c_x \\ 0&1&0&c_y \\ 0&0&1&c_z \\ 0&0&0&1 \end{bmatrix}$$
y la matriz de rotación recibe $0$ y un $1$ en la esquina. Ahora la proyección es
$$P'(\vec x) = TRPR^{-1}T^{-1}\vec x$$ $$P' = TRPR^{-1}T^{-1}$$