Matriz de Viewport

De Codepixel
  • Para transformar coordenadas, desde un espacio de imagen normalizado -1..1 a espacio de coordenadas de pantalla en píxeles usaremos esta matriz :



V_{ normalized \to pixels }=\begin{bmatrix}
\frac{width}{2}& 0  & 0 & \frac{width}{2} \\
0 & \frac{height}{2} & 0 & \frac{height}{2} \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}


  • Si tenemos las coordenadas del viewport, dentro de la pantalla:



V_{ normalized \to pixels }=\begin{bmatrix}
\frac{x_1-x_0}{2}& 0  & 0 & x_0 + \frac{x_1-x_0}{2} \\
0 & \frac{y_1-y_0}{2} & 0 & y_0 + \frac{y_1-y_0}{2} \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}


  • Al contrario, para transformar una coordenada de pantalla, en píxeles, a un espacio normalizado entre -1..1 , usaremos


V_{ pixels \to normalized }=\begin{bmatrix}
\frac{2}{width} & 0  & 0 & - 1 \\
0 & \frac{2}{height} & 0 & - 1 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}


  • usando las coordenadas del viewport que queremos transformar :



V_{ pixels \to normalized }=\begin{bmatrix}
\frac{2}{x_1-x_0} & 0  & 0 & - \frac{x1+x0}{x1-x0} \\
0 & \frac{2}{y_1-y_0} & 0 & - \frac{x0-x1}{y1-y0} \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}


  • Es importante destacar que OpenGL define y0 en la parte inferior de la pantalla. Si usamos esta matriz para generar rayos, y mostrar el resultado en OpenGL, tenemos que tener esto en cuenta, intercambiando y0,y1.
Herramientas personales