到目前为止咱们绘制了很多模型,用到了很多颜色,颜色中有四个份量(RGBA),其中的A份量表示透明度,这个份量目前为止咱们尚未真正的用到;html
A份量,表示的是当前的透明度,若是设定为 0.5 就会半透明,能够看到半透明的模型,也能够看见模型后面的东西;git
要实现透明,须要开启混合,会使用到下面的两个方法:github
// 开启混合 gl.enable(gl.BLEND); // 设定混合效果 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
源因子和目标因子是能够经过gl.blendFunc函数来进行设置的less
gl.blendFunc有两个参数,前者表示源因子,后者表示目标因子。这两个参数能够是多种值,下面介绍比较经常使用的几种。函数
注意:所谓源颜色和目标颜色,是跟绘制的顺序有关的。假如先绘制了一个红色的物体,再在其上绘制绿色的物体。则绿色是源颜色,红色是目标颜色。若是顺序反过来,则红色就是源颜色,绿色才是目标颜色。在绘制时,应该注意顺序,使得绘制的源颜色与设置的源因子对应,目标颜色与设置的目标因子对应。测试
核心代码以下:spa
// 开启混合 gl.enable(gl.BLEND); // 设定混合模式为透明模式 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
示例请点击:https://hammerc.github.io/dou3d-ts/examples/learningNotes/lesson_12/LookAtBlendedTriangles.html3d
须要注意的是,透明的图像绘制时,不能开启深度测试,开启深度测试,不管是否透明,靠后的颜色都会丢失;code
若是已经开启了深度测试(用于绘制不透明的图像),还能够调用depthMask来临时开启和关闭深度测试,调用 gl.depthMask(false); 能够关闭深度测试;htm
另外,绘制透明立方体时,若是须要显示背面,就关闭剔除模式,须要不要显示背面就开启剔除模式并设定为剔除背面;
示例请点击:https://hammerc.github.io/dou3d-ts/examples/learningNotes/lesson_12/BlendedCube.html