混合是实现物体透明度的技术。
alpha = 1.0,完全不透明;alpha = 0.0,完全透明。
有些图片透明的部分是完全透明的,完全透明的部分可以直接丢弃。
if(texColor.a < 0.1)
discard;
透明纹理的加载:当环绕方式设置为GL_REPEAT时,opengl会对边缘的值和纹理下一个重复的值进行插值。使用透明纹理时,图像顶部会与底部颜色插值,若底部不是透明的,则会出现一个半透明的有色边框环绕纹理。要想避免这个,每当你alpha纹理的时候,请将纹理的环绕方式设置为GL_CLAMP_TO_EDGE。
混合:
glEnable(GL_BLEND);
C¯result=C¯source∗Fsource+C¯destination∗Fdestination
- C¯source:源颜色向量。这是源自透明纹理的颜色向量。
- C¯destination:目标颜色向量。这是当前储存在颜色缓冲中的颜色向量。
- Fsource:源因子值。指定了alpha值对源颜色的影响。
- Fdestination:目标因子值。指定了alpha值对目标颜色的影响。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //设置因子值
绘制一个包含透明和不透明的物体的场景时:
1.先绘制所有不透明得分物体;
2.对所有不透明的物体排序;
3.按由远及近的顺序绘制不透明物体。