Quelle est la relation entre la couleur gl et la couleur frontale gl dans le vertex et les shaders de fragment
j'ai des vertex de passage et des shaders de fragment.
vertex shader
void main(void)
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
fragment shader
void main(void)
{
gl_FragColor = gl_Color;
}
ceux qui produisent le rendu vide (noir pas la couleur de fond comme glClearBuffer fait).
si je modifie le shader du vertex pour définir le gl_FrontColor à gl_Color, cela rend le tampon OpenGl intact ... avec est le comportement attendu des shaders de passage.
void main(void)
{
gl_FrontColor = gl_Color; //Added line
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
je suis confus, comment paramétrer le gl_FrontColor dans le vertex shader peut changer la valeur du gl_Color dans le fragment un ? Ce que je suis absent ?
2 réponses
gl_Color
signifie des choses différentes à des endroits différents.
Dans le vertex shader, gl_Color
représente l'attribut primaire de couleur par Sommet transmis par l'utilisateur. Il est défini à l'aide de glColor*
appels ou un tableau de données extraites par glColorPointer
.
dans le fragment shader,gl_Color
représente la couleur interpolée pour le face du triangle Rendu. Rappelez-vous que les triangles ont une face avant et une face arrière. Si vous activez l'abattage des visages, alors tous les visages d'un seul type ou l'autre (ou les deux) ne sont pas rendus. Cependant, si vous désactivez l'abattage face, alors les deux côtés sont rendus.
il est souvent utile d'avoir différentes valeurs de sortie per-sommet basées sur la face particulière du triangle. La couleur principale a une couleur avant et une couleur arrière, représentant la couleur pour les triangles faisant face à l'avant et les triangles faisant face à l'arrière. Les sorties du vertex shader pour ceux-ci sont gl_FrontColor
et gl_BackColor
.
si vous faites du rendu recto-verso, vous aurez besoin pour définir ces deux valeurs dans l'ordre pour le fragment shader's gl_Color
entrée de dire quoi que ce soit. Si vous ne faites que le rendu front-face, alors vous n'avez qu'à définir gl_FrontColor
.
gl_Color est la couleur que vous avez passée dans votre source aux sommets, donc c'est un attribut. gl_FrontColor (et aussi BackColor) sont des variables qui positionnent le gl_Color dans fragmentshader en fonction du côté de la primitive que vous voyez. Donc si vous voyez devant gl_Color sera égal à gl_FrontColor...