Cambiar el color de un vértice en un sombreador de vértice
-
23-09-2019 - |
Pregunta
¿Es posible establecer el color de un solo vértice utilizando un programa de sombreador de vértice GLSL, de la misma manera que GL_Position cambia la posición de un vértice?
Solución
Para las versiones de GLSL Prior versión 1.30, desea escribir en el gl_FrontColor
o gl_BackColor
empotrados, que son variables accesibles en el sombreador de vértice. Lea sobre variaciones en la especificación GLSL 1.10 (http://www.opengl.org/registry/doc/glslangspec.full.1.10.59.pdf) para obtener más información sobre ellos, o la especificación de extensión GL_ARB_VERTEX_SHADER.
gl_FrontColor
y gl_BackColor
son vectores 4D RGBA que toman escalares de punto flotante normalizados.
Pero esto se establecerá todos Los vértices a rojo, no solo un vértice. Esto se debe a que el mismo sombreador de vértice se ejecuta para todos los vértices. Si desea establecer colores individuales, use glColorPointer
Juntos con glDrawArrays
, glDrawElements
, glDrawRangeElements
o glMultiDrawElements
. El color de vértice establecido por glColorPointer
se puede leer como gl_Color
En el sombreador de vértice. gl_Color
En el sombreador de vértice hay un atributo por vértice.
Para leer el color que escribió en el sombreador de vértice, en el sombreador de fragmentos, lea el variado integrado gl_Color
. Los fragmentos terminados deben escribirse para gl_FragColor
.
Ejemplo de sombreador de vértice:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Ejemplo de sombreador de fragmentos:
void main()
{
gl_FragColor = gl_Color;
}
Además, para que el sombreador de vértice establezca los varios al igual que la tubería de función fija de OpenGL, llame a la función ftransform ().
void main()
{
ftransform();
}