zoukankan      html  css  js  c++  java
  • OpenGL 混合功能

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

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

    三、主要代码实现

    //核心代码

    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

  • 相关阅读:
    杂七杂八注意
    数字和表达式
    小总结
    层级定位
    webdriver对象定位方法
    自动化测试第一季-selenium + python(环境搭建与基础代码解释)
    补基础—.—
    1-13 代理ARP和RARP
    Nginx/LVS/HAProxy负载均衡软件的优缺点详解
    分布式集群系统下的高可用session解决方案
  • 原文地址:https://www.cnblogs.com/lybSkill/p/9983755.html
Copyright © 2011-2022 走看看