OpenGL中的混合(Blending)

简介:
这篇是在上一篇的基础上修改而来的,对应着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;
    }
最终效果如图所示:

200780904.jpg


本文转自Phinecos(洞庭散人)博客园博客,原文链接http://www.cnblogs.com/phinecos/archive/2007/08/09/849930.html,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
计算机视觉
图像处理之透明混合 - Alpha Blending效果
图像处理之透明混合 - Alpha Blending效果
47 0
|
算法
QT+OpenGL高级光照 Blinn-Phong和Gamma校正
冯氏光照:视线与反射方向之间的夹角不小于90度,镜面光分量会变成0.0(不是很合理,会有清晰的分界线) Blinn-Phone模型采用了半程向量,即光线与视线夹角一般方向上的一个单位向量。当半程向量与法线向量越接近,镜面光分量就越大。
138 0
|
并行计算 iOS开发 MacOS
Metal每日分享,3x3矩阵卷积滤镜效果
Metal每日分享,3x3矩阵卷积滤镜效果
Metal每日分享,3x3矩阵卷积滤镜效果
|
并行计算 iOS开发 计算机视觉
Metal每日分享,均值模糊滤镜效果
Metal每日分享,均值模糊滤镜效果
Metal每日分享,均值模糊滤镜效果
|
并行计算 iOS开发 MacOS
Metal每日分享,图像单色滤镜效果
Metal每日分享,图像单色滤镜效果
Metal每日分享,图像单色滤镜效果
|
并行计算 iOS开发 MacOS
Metal每日分享,4x4颜色矩阵滤镜效果
Metal每日分享,4x4颜色矩阵滤镜效果
Metal每日分享,4x4颜色矩阵滤镜效果
Blend混合效果
Blend混合效果
141 0
|
计算机视觉
目标检测的Tricks | 【Trick8】数据增强——随机旋转、平移、缩放、错切、hsv增强
目标检测的Tricks | 【Trick8】数据增强——随机旋转、平移、缩放、错切、hsv增强
825 0
目标检测的Tricks | 【Trick8】数据增强——随机旋转、平移、缩放、错切、hsv增强
|
缓存 BI API
从0开发游戏引擎之纹理管理器实现 纹理数据绑定OpenGL滤波方式选择线性滤波
从0开发游戏引擎之纹理管理器实现 纹理数据绑定OpenGL滤波方式选择线性滤波
四、 OpenGL ES GLSL图片倒置的翻转解决方案(6种)
OpenGL ES GLSL图片倒置的翻转解决方案(6种)
724 0
四、 OpenGL ES GLSL图片倒置的翻转解决方案(6种)