OpenGL中,混合用来实现物体透明度。透明就是说一个物体的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个物体的透明度是通过它颜色的aplha值来决定的。
想加载有alpha值的纹理时,要在纹理生成过程中告诉OpenGL,我们的纹理现在使用alpha通道了:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
保证你在片段着色器中获取了纹理的全部4个颜色分量,而不仅仅是RGB分量:
// FragColor = vec4(vec3(texture(texture1, TexCoords)), 1.0);
FragColor = texture(texture1, TexCoords);
丢弃
OpenGL默认是不知道怎么处理alpha值的,更不知道什么时候应该丢弃片段。我们需要自己手动来弄。GLSL给了discard命令,一旦被调用,它就会保证片段不会被进一步处理,所以就不会进入颜色缓冲。有了这个指令,我们就能够在片段着色器中检测一个片段的alpha值是否低于某个阈值,如果是的话,则丢弃这个片段,就好像它不存在一样。
vec4 texColor = texture(texture1, TexCoords);
if(texColor.a < 0.1)
discar