这篇是在上一篇的基础上修改而来的,对应着Nehe教程的第8课,代码仍然采用MFC框架来实现。

其中InitGL需要做些修改,加入混合操作所需要的代码:

BOOLCOpenGLDemoView::InitGL(GLvoid)                                       
 {
    if (!LoadGLTextures())                                // Jump To Texture Loading Routine ( NEW )
    {
        return FALSE;                                    // If Texture Didn't Load Return FALSE
    }
    glEnable(GL_TEXTURE_2D);                            // Enable Texture Mapping ( NEW )

glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);                // 设置环境光
    glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);                // 设置漫射光
    glLightfv(GL_LIGHT1, GL_POSITION,LightPosition);            // 设置光源位置
    glEnable(GL_LIGHT1);                            // 启用一号光源

glShadeModel(GL_SMOOTH);                            // Enable Smooth Shading
    //COLORREF color = ::GetSysColor(COLOR_3DFACE);
    //glClearColor((float)GetRValue(color)/255.0f,
    //             (float)GetGValue(color)/255.0f,
    //             (float)GetBValue(color)/255.0f,
    //             1.0);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                // Black Background

glClearDepth(1.0f);                                    // Depth Buffer Setup
    glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing
    glDepthFunc(GL_LEQUAL);                                // The Type Of Depth Testing To Do
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);    // Really Nice Perspective Calculations

glColor4f(1.0f, 1.0f, 1.0f, 0.5);                    // Full Brightness.  50% Alpha
    glBlendFunc(GL_SRC_ALPHA,GL_ONE);                    // Set The Blending Function For Translucency

return TRUE;                                        // Initialization Went OK
}

最后在void COpenGLDemoView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)中加入对B按键的事件处理代码:


    case 'B':
    {
            if(bPressed==TRUE)
            {//防止长时间按着'B'键而导致持续混合变化
                bLighting = !bLighting;
                if(bLighting)
                {
                    glEnable(GL_BLEND);            // Turn Blending On
                    glDisable(GL_DEPTH_TEST);    // Turn Depth Testing Off
                }
                else
                {
                    glDisable(GL_BLEND);        // Turn Blending Off
                    glEnable(GL_DEPTH_TEST);    // Turn Depth Testing On
                }
            }
            bPressed = FALSE;

break;
    }

最终效果如图所示:

OpenGL中的混合(Blending)相关推荐

  1. OpenGL 混合Blending

    OpenGL混合Blending 混合Blending简介 丢弃片段 混合 渲染半透明纹理 不要打乱顺序 混合Blending简介 OpenGL中,混合(Blending)通常是实现物体透明度(Tra ...

  2. OpenGL中的Blend(混色)

    混色的概念 所谓的混色,就是将当前要绘制的物体的颜色和颜色缓冲区中已经绘制的颜色进行混合,最终决定了当前物体的颜色. 如下图中,我们透过不透明的窗户来看窗外的景色,这就是一种混色. 透明的物体可以是完 ...

  3. OpenGL中的混色问题(Alpha通道)

    混合是一种常用的技巧,通常可以用来实现半透明.但其实它也是十分灵活的,你可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象. 混合是什么呢?混合就是把两种颜色混在一起.具体一点,就是把某 ...

  4. opengl 反走样 混合 多重采样 blend multisample

    1. 反走样         在光栅图形显示器上绘制非水平且非垂直的直线或多边形边界时,或多或少会呈现锯齿状或台阶状外观.这是因为直线.多边形.色彩边界等是连续的,而光栅则是由离散的点组成,在光栅显示 ...

  5. OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))

    Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机.扫描仪.CT或者磁共振成像.无论哪种方法,我们(人类)看到的是图像,而让数字设备来"看"的时候,则 ...

  6. (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试

    转自http://www.cppblog.com/flashboy/archive/2009/09/01/94974.html 大家好.现在因为参加工作的关系,又是长时间没有更新.趁着国庆的空闲,总算 ...

  7. Unity中的混合光照

    Unity中的混合光照 Baked Indirect Shadowmask Distance Shadowmask Subtractive Reference Unity支持三种混合光照模式,分别是B ...

  8. OpenGL中的颜色混合功能(一)

    OpenGL中的颜色混合功能(一)              我们知道,材料属性和光照参数可以极大地增加图形的逼真度,但除此之外,我们在对现实世界进行建模时,有许多效果是通过混合颜色的方式实现的.透明 ...

  9. 【OpenGL】关于OpenGL中Bind函数的理解

    在OpenGL中,总是会遇到类似下面的绑定语句: glBindTexture(GL_TEXTURE_2D, renderTex); glBindFramebuffer(GL_FRAMEBUFFER, ...

最新文章

  1. PHP登录状态判定的思路
  2. linux中send函数MSG_NOSIGNAL异常消息
  3. C函数数组元素初始化
  4. 配置VNC并远程控制服务器(电脑)
  5. 提高关键词排名的28个SEO技巧
  6. 基础知识—函数-函数参数及返回值
  7. 微软修复严重的Azure漏洞,可用于泄露客户数据
  8. 第一次写博,好激动啊!
  9. javascript中的array对象属性及方法
  10. 谈谈作为DBA我对MySQL数据库优化的理解
  11. csv文件转换成utf-8格式乱码
  12. 技术状态管理计划-模板
  13. 遗传算法之路径规划matlab代码(栅格地图)含详细注释
  14. Hyper-V 2016 系列教程33 学习型服务器推荐
  15. mouse without borders 两台主机共用一套鼠标键盘
  16. 360极速浏览器去广告优化版 v13.0.2101.0
  17. 这款TWS蓝牙耳机颜值与实用性到底怎么样?
  18. 随机过程 更新过程(下)
  19. 不带管理口的mellanox交换机打开端口一分二特性
  20. live2d sdk java_Unity Live2D SDK的使用方法(一)——载入资源

热门文章

  1. xmemcached发布1.3.6
  2. Nginx对某个文件夹或整个站点进行登录认证的方法
  3. mysql中的主从复制slave-skip-errors参数使用方法
  4. 买笔记本的10大愚蠢表现
  5. 六月开发语言排行榜出炉 ActionScript回前20
  6. 斯洛文尼亚接受BCH支付的商家达343家,日本和北昆士兰州对BCH接受度增长迅速
  7. 《为了你我愿意热爱整个世界》
  8. 为什么Bugs没有被修复?
  9. GSMA公布2016年亚洲移动大奖提名名单
  10. 《Android深度探索(卷1):HAL与驱动开发》——1.6节 Linux设备驱动