¿Cuándo se produce la transición del espacio del clip a las coordenadas de la pantalla?


Estaba estudiando la tubería de renderizado y cuando llegué a la etapa de recorte se explicó que desde el espacio de vista (ojo o cámara) tenemos que pasar al espacio de clip, también llamado espacio de dispositivo normalizado (NDC), que es un espacio cúbico de -1 a 1.

Sin embargo, ahora no entiendo cuándo sucede el paso de este espacio al espacio de coordenadas de la pantalla:

  1. ¿Justo después del recorte y antes de la rasterización?

  2. Después rasterización y antes de scissor y z-test?

  3. Al final, justo antes de escribir en el búfer de marco?

Author: nbro, 2014-02-18

3 answers

No, el espacio de clip y el espacio NDC no son lo mismo.

El espacio del clip está realmente a un paso de NDC, todas las coordenadas se dividen por Clip.W para producir NDC. Cualquier cosa fuera del rango [-1,1] el espacio NDC resultante corresponde a un punto que está fuera del volumen de recorte. Hay una razón por la que el espacio de coordenadas antes de NDC se llama espacio de clip;)

Estrictamente hablando, sin embargo, el espacio NDC no es necesariamente cúbico. Es cierto que el espacio NDC es un cube en OpenGL, pero en Direct3D no lo es. En D3D la coordenada Z en el espacio NDC se extiende desde 0.0 to 1.0, mientras que va desde -1.0 to 1.0 in GL. X e Y se comportan igual en GL y D3D (es decir, van desde -1.0 to 1.0). NDC es un espacio de coordenadas estándar, pero tiene una representación diferente en diferentes API.

Por último, el espacio NDC al espacio de pantalla (TAMBIÉN conocido como espacio de ventana) se produce durante la rasterización y está definido por su ventana y rango de profundidad. Las ubicaciones de fragmentos realmente no tendrían sentido en ningún otro espacio de coordenadas, y esto es lo que produce la rasterización: fragmentos.


Actualización:

Introducido en OpenGL 4.5, la extensión GL_ARB_clip_control le permite adoptar la convención NDC de D3D en GL.

El comportamiento tradicional de OpenGL es:

glClipControl (GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE);

El comportamiento de Direct3D se puede lograr a través de:

glClipControl (GL_UPPER_LEFT, GL_ZERO_TO_ONE); // Y-axis is inverted in D3D
 39
Author: Andon M. Coleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-16 11:28:15

El espacio de clip y NDC (coordenadas de dispositivo normalizadas) no son lo mismo, de lo contrario no tendrían nombres diferentes.

El espacio de clip es donde están los puntos de espacio después de la transformación de puntos por la matriz de proyección, pero antes de la normalización por w.

El espacio NDC es el espacio en el que se encuentran los puntos después de la normalización por w.

Http://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/projection-matrix-GPU-rendering-pipeline-clipping

Camera space --> 
x projection matrix ---> 
Clip space (before normalisation) --->
Clipping ---> 
Normalisation by w (x/w, y/w, z/w) --->
NDC space (in the range [-1, 1] in x and y)
 9
Author: user18490,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-12 18:54:15

Aparentemente, según Apple, el espacio del clip es el mismo que NDC.

Https://developer.apple.com/documentation/metal/hello_triangle

Cita:

"La tarea principal de una función de vértice (también conocida como sombreador de vértices) es procesar los datos de vértices entrantes y asignar cada vértice a una posición en la ventana. De esta manera, las etapas posteriores de la canalización pueden hacer referencia a esta posición de la ventana y renderizar píxeles a una ubicación exacta en el elemento de diseño. La función vértice logra esta tarea traduciendo coordenadas de vértice arbitrarias en coordenadas de dispositivo normalizadas, también conocidas como coordenadas de espacio de clip."

Otra cita de los comentarios en el código de ejemplo:

"La posición de salida de cada sombreador de vértices está en el espacio de clip (también conocido como espacio de coordenadas de dispositivo normalizado, o NDC)."

Tal vez esto es porque el tutorial está en 2D? Declaraciones engañosas..

 1
Author: Siamaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-10 19:19:28