descargar opengl shader pixel-shader vertex-shader

opengl - descargar - shader minecraft



¿Cuál es la relación entre gl_Color y gl_FrontColor en los sombreadores de vértices y fragmentos? (2)

gl_Color es el color que pasaste en tu fuente a los vértices, por lo que es un atributo. gl_FrontColor (y también BackColor) son variaciones que configuran el gl_Color en el fragmenthader en función del lado del primitivo que ve. Entonces, si ves que gl_Color frontal será igual a gl_FrontColor ...

Tengo vértices de paso y sombreadores de fragmentos.

sombreador de vértice

void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }

fragmento de sombreado

void main(void) { gl_FragColor = gl_Color; }

Esos producen una representación vacía (el negro no es el color de fondo como lo hace glClearBuffer).

Si modifico el sombreador de vértice para establecer el gl_FrontColor en gl_Color, se procesa el búfer OpenGl intacto ... con el comportamiento esperado de los shaders de paso.

void main(void) { gl_FrontColor = gl_Color; //Added line gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }

Estoy confundido, ¿cómo la configuración de gl_FrontColor en el vértice sombreado puede cambiar el valor de gl_Color en el fragmento? ¿Qué me estoy perdiendo?


gl_Color significa diferentes cosas en diferentes lugares.

En el sombreador de vértices, gl_Color representa el atributo de color primario por vértice que pasa el usuario. Esto se configura mediante llamadas a glColor* o datos de matriz obtenidos por glColorPointer .

En el fragmento de sombreado, gl_Color representa el color interpolado para el revestimiento del triángulo que se representa. Recuerda que los triángulos tienen una cara frontal y una cara posterior. Si habilita la selección de caras, entonces no se renderizan todas las caras de un tipo u otro (o ambas). Sin embargo, si desactiva la selección de caras, ambos lados se renderizan.

A menudo es útil tener diferentes valores de salida por vértice en función de la orientación particular del triángulo. El color primario tiene un color de frente y un color de fondo, que representa el color de los triángulos orientados hacia el frente y los triángulos orientados hacia atrás. Las salidas de sombreado de vértices para estos son gl_FrontColor y gl_BackColor .

Si está realizando una representación a doble cara, deberá configurar ambos valores para que la entrada gl_Color del sombreador de fragmentos gl_Color un significado. Si solo está haciendo una representación frontal, solo necesita configurar gl_FrontColor .