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
.