OpenGL 混合功能

mac2022-06-30  16

一、概念:简言之,即在颜色缓存区和深度缓存区中,新旧颜色的覆盖和替换问题;已经存在于缓存区的为目标颜色,即将进入缓存区的为源颜色;

二、应用场景:在不透明的图形前绘制一个透明的图形;

三、主要代码实现

//核心代码

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(); }

四、效果

 

 

 

GitHub

转载于:https://www.cnblogs.com/lybSkill/p/9983755.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)