以前我们使用glColor
Alpha值可以理解为材质(material) 的不透明程度, 0.0代表材质完全透明, 1.0代表材质完全不透明。
混合公式:
(Rs As + Rd (1 - As), Gs As + Gd (1 - As), Bs As + Bs (1 - As), As As + Ad (1 - As))
代码说明:
指定顶点以全亮度(当前颜色RGB分量全为1.0为)绘制,然后Alpha指定为0.5,表示为半透明。当使用纹理影射的时候我们怎样指定颜色呢? 很简单, 在调制的纹理模式中, 纹理的每个像素点都会与当前颜色相乘。 所以, 如果要被绘制的颜色为(0.5, 0.6, 0.4), 通过相乘我们可以得到(0.5, 0.6, 0.4, 0.5)。(alpha默认值为1.0)下面代码指定
glColor
指定源混合因子和目标混合因子
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glEnable(GL_BLEND); // Turn Blending On
glDisable(GL_DEPTH_TEST);//关闭深度测试,这样做是为了被遮住的三角形也能被渲染。(这是不正确的,因为如果混合的层数多了将引起错误正确方法如下)
这样做主要是为了简化,教程主要说明混合的原理。正确的方法是在整个场景绘制完之后再绘制所有的透明 (alpha < 1.0) 多边形, 而且要按照由远及近的深度顺序, 这是由于事实上按照不同的顺序混合两个(1和2)多边形会得到不同的结果。 假如多边形1距离我们最近, 那么正确的方法是先绘制多边形2, 然后是多边形1。 如果你看着它, 那么真实情况就是它们后面的光首先经过多边形2, 然后经过多边形1, 最后到达你的眼睛。 所以, 你需要按照深度将透明的多边形进行排序, 开着深度缓存并在整个场景绘制完毕之后再绘制它们, 否则将得到不正确的结果