changer la couleur d'un sommet dans un vertex shader
-
23-09-2019 - |
Question
Est-il possible de définir la couleur d'un seul sommet à l'aide d'un programme de vertex shader GLSL, de la même manière que gl_Position change la position d'un sommet?
La solution
Pour les versions de GLSL version antérieure 1.30, vous voulez écrire au gl_FrontColor
ou gl_BackColor
Encastrements, qui sont accessibles varyings dans le vertex shader. Lisez à propos varyings dans le GLSL 1.10 spécification ( http: // www .opengl.org / registre / doc / GLSLangSpec.Full.1.10.59.pdf ) pour en savoir plus sur eux, ou la spécification d'extension GL_ARB_vertex_shader.
gl_FrontColor
et gl_BackColor
sont des vecteurs de RVBA 4D qui prennent normalisées scalaires en virgule flottante.
Mais cela va créer tous les sommets au rouge, non seulement un sommet. En effet, le même vertex shader est exécuté pour tous les sommets. Si vous souhaitez définir des couleurs individuelles, utilisez glColorPointer
avec glDrawArrays
, glDrawElements
, glDrawRangeElements
ou glMultiDrawElements
. La couleur de sommet défini par glColorPointer
peut être lu comme gl_Color
dans le vertex shader. gl_Color
dans le vertex shader est un attribut par vertex.
Pour lire la couleur que vous avez écrit dans le vertex shader, dans le fragment shader, lisez intégré à différents gl_Color
. fragments finis doivent être écrits sur gl_FragColor
.
Vertex shader exemple:
void main()
{
gl_FrontColor = gl_Color;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Exemple de shader Fragment:
void main()
{
gl_FragColor = gl_Color;
}
En outre, pour faire le vertex shader définir les varyings tout comme l'OpenGL pipeline à fonction fixe, appelez la fonction ftransform ().
void main()
{
ftransform();
}