一、概念:简言之,即在颜色缓存区和深度缓存区中,新旧颜色的覆盖和替换问题;已经存在于缓存区的为目标颜色,即将进入缓存区的为源颜色;
二、应用场景:在不透明的图形前绘制一个透明的图形;
三、主要代码实现
//核心代码
void RenderScene() { //清除缓存区 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //设置四个固定矩形颜色 GLfloat vRed[] = {1.0f, 0.0f, 0.0f, 0.5f}; GLfloat vGreen[] = {0.0f, 1.0f, 0.0f, 1.0f}; GLfloat vBlue[] = {0.0f, 0.0f, 1.0f, 1.0f}; GLfloat vBlack[] = {0.0f, 0.0f, 0.0f, 1.0f}; //绘制四个固定矩形 //GLT_SHADER_IDENTITY:单元着色器 shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); redBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vGreen); greenBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlue); blueBatch.Draw(); shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vBlack); blackBatch.Draw(); //移动矩形设置混合功能 //开启混合功能 glEnable(GL_BLEND); //设置混合因子 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //使用固定管线着色器 shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); //绘制 squareBatch.Draw(); //关闭混合功能 glDisable(GL_BLEND); //后台渲染完成交给前台 glutSwapBuffers(); }
四、效果