studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones opengl graphics rendering hlsl

opengl - reales - libro de android studio en español pdf



¿Cuándo ocurre la transición del espacio del clip a las coordenadas de la pantalla? (3)

Estaba estudiando la tubería de renderizado y cuando llegué a la etapa de recorte me explicaron 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 cuando el paso de este espacio a la pantalla coordina el espacio que pasa:

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

  2. ¿Después de la rasterización y antes de tijera y z-test?

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


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

El espacio del clip está a un paso del NDC, todas las coordenadas se dividen por Clip.W para producir NDC. Cualquier cosa fuera del rango [ -1 , 1 ] en el espacio NDC resultante corresponde a un punto que está fuera del volumen de recorte. Hay una razón por la cual 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 cubo en OpenGL, pero en Direct3D no lo es. En D3D, la coordenada Z en el espacio NDC varía de 0.0 a 1.0 , mientras que varía de -1.0 a 1.0 en GL. X e Y se comportan igual en GL y D3D (es decir, van desde -1.0 a 1.0 ). NDC es un espacio de coordenadas estándar, pero tiene una representación diferente en diferentes API.

Por último, el espacio de NDC para el espacio de la pantalla (también conocido como espacio de la ventana) se produce durante la rasterización y está definido por su ventana gráfica y rango de profundidad. La ubicación de fragmentos realmente no tendría sentido en ningún otro espacio de coordenadas, y esto es lo que produce la rasterización: fragmentos .

Actualizar:

Introducido en OpenGL 4.5, la extensión GL_ARB_clip_control 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


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

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

Citar:

"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 gráfica. De esta forma, las etapas posteriores de la canalización pueden referirse a esta posición de vista y generar píxeles a una ubicación exacta en el dibujable. La función de vértice lleva a cabo esta tarea al traducir las coordenadas de vértices arbitrarios en coordenadas de dispositivo normalizadas, también conocidas como coordenadas de espacio de clip.

Otra cita de comentarios en el código de muestra:

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

Quizás esto se deba a que el tutorial está en 2D. Declaraciones engañosas ..


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

El espacio del clip es donde están los puntos del espacio después de la transformación del punto 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 .

scratchapixel.com/lessons/3d-basic-rendering/…

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)