欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

OpenGL 混合功能

程序员文章站 2022-06-30 19:37:50
一、概念:简言之,即在颜色缓存区和深度缓存区中,新旧颜色的覆盖和替换问题;已经存在于缓存区的为目标颜色,即将进入缓存区的为源颜色; 二、应用场景:在不透明的图形前绘制一个透明的图形; 三、主要代码实现 //核心代码 四、效果 GitHub ......

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

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

三、主要代码实现

//核心代码

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

四、效果

OpenGL 混合功能

 

OpenGL 混合功能 

 

github