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:
Fragment shader et la coloration d'une texture

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:

Fragment shader et la coloration d'une texture

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:

Fragment shader et la coloration d'une texture

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:

Fragment shader et la coloration d'une texture

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.

Ok, il semble avoir quelque chose à voir avec le fait que la texture a prémultiplié alpha. Si je charge la texture sans cela, il ressemble à ce que j'attendais.

OriginalL'auteur vertti | 2013-09-13