Fragment shader et la coloration d'une texture
Je suis en train de faire du sens de réglage des couleurs de texture avec un fragment shader. Mon fragment shader est super simple:
uniform sampler2D sampler;
void main() {
vec4 tex = texture2D ( sampler, uvVarying );
gl_FragColor = vec4(tex.r, tex.g, tex.b, tex.a);
}
Cela attire mon chien texture comme prévu:
si je puis changer le shader pour
gl_FragColor = vec4(tex.r, tex.g, tex.b, 1.0);
le résultat est ce que j'attendais, la transparence de l'info est perdu:
mais si j'ai la place:
gl_FragColor = vec4(tex.r, tex.g, tex.b, 0.0);
Je m'attendais à ce qu'il disparaisse complètement, mais au lieu de cela j'obtiens:
Ce qui se passe??
Et mon problème: j'ai voulu ajouter un peu de teinte rouge à ma texture avec:
gl_FragColor = vec4(tex.r + 0.5, tex.g, tex.b, tex.a);
Maintenant, je m'attendais à avoir la même transparence info comme la texture d'origine, mais à la place j'obtiens ceci:
Ce qui me manque ici. La texture est à l'aide de fusion par défaut du moteur qui est src = GL_ONE, dst = GL_ONE_MINUS_SRC_ALPHA
.
OriginalL'auteur vertti | 2013-09-13
Vous devez vous connecter pour publier un commentaire.
Votre mode de fusion suppose alpha pré-multiplié, qui, normalement, est un excellent choix. Mais il exige que les valeurs RVB multiplié par la valeur alpha. La valeur alpha de contrôle seulement, comment une grande partie de l'arrière-plan est ajouté à l'fragments entrant dans ce mode. Donc, pour faire RVB "fade out", ils doivent être modulée par la valeur alpha.
Maintenant, quand vous êtes de jouer avec cette valeur alpha à être constant, de vos valeurs RVB ne correspondent plus que premultiplication. Essayez plutôt ceci pour votre la teinte rouge:
Ce qui ajoute un alpha modulée rouge à la texture.
Dans le cas où vous attendent de l'image à disparaître complètement, vous auriez besoin d'un autre mode de fusion, à savoir GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, mais avec ce que vous avez besoin d'un non-prémultiplié-alpha de l'image, ou de vous dédommager cette premultiplication dans le shader:
OriginalL'auteur datenwolf