OpenGL中的混合(Blending)
这篇是在上一篇的基础上修改而来的,对应着Nehe教程的第8课,代码仍然采用MFC框架来实现。
其中InitGL需要做些修改,加入混合操作所需要的代码:
{
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)相关推荐
- OpenGL 混合Blending
OpenGL混合Blending 混合Blending简介 丢弃片段 混合 渲染半透明纹理 不要打乱顺序 混合Blending简介 OpenGL中,混合(Blending)通常是实现物体透明度(Tra ...
- OpenGL中的Blend(混色)
混色的概念 所谓的混色,就是将当前要绘制的物体的颜色和颜色缓冲区中已经绘制的颜色进行混合,最终决定了当前物体的颜色. 如下图中,我们透过不透明的窗户来看窗外的景色,这就是一种混色. 透明的物体可以是完 ...
- OpenGL中的混色问题(Alpha通道)
混合是一种常用的技巧,通常可以用来实现半透明.但其实它也是十分灵活的,你可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象. 混合是什么呢?混合就是把两种颜色混在一起.具体一点,就是把某 ...
- opengl 反走样 混合 多重采样 blend multisample
1. 反走样 在光栅图形显示器上绘制非水平且非垂直的直线或多边形边界时,或多或少会呈现锯齿状或台阶状外观.这是因为直线.多边形.色彩边界等是连续的,而光栅则是由离散的点组成,在光栅显示 ...
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机.扫描仪.CT或者磁共振成像.无论哪种方法,我们(人类)看到的是图像,而让数字设备来"看"的时候,则 ...
- (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试
转自http://www.cppblog.com/flashboy/archive/2009/09/01/94974.html 大家好.现在因为参加工作的关系,又是长时间没有更新.趁着国庆的空闲,总算 ...
- Unity中的混合光照
Unity中的混合光照 Baked Indirect Shadowmask Distance Shadowmask Subtractive Reference Unity支持三种混合光照模式,分别是B ...
- OpenGL中的颜色混合功能(一)
OpenGL中的颜色混合功能(一) 我们知道,材料属性和光照参数可以极大地增加图形的逼真度,但除此之外,我们在对现实世界进行建模时,有许多效果是通过混合颜色的方式实现的.透明 ...
- 【OpenGL】关于OpenGL中Bind函数的理解
在OpenGL中,总是会遇到类似下面的绑定语句: glBindTexture(GL_TEXTURE_2D, renderTex); glBindFramebuffer(GL_FRAMEBUFFER, ...
最新文章
- PHP登录状态判定的思路
- linux中send函数MSG_NOSIGNAL异常消息
- C函数数组元素初始化
- 配置VNC并远程控制服务器(电脑)
- 提高关键词排名的28个SEO技巧
- 基础知识—函数-函数参数及返回值
- 微软修复严重的Azure漏洞,可用于泄露客户数据
- 第一次写博,好激动啊!
- javascript中的array对象属性及方法
- 谈谈作为DBA我对MySQL数据库优化的理解
- csv文件转换成utf-8格式乱码
- 技术状态管理计划-模板
- 遗传算法之路径规划matlab代码(栅格地图)含详细注释
- Hyper-V 2016 系列教程33 学习型服务器推荐
- mouse without borders 两台主机共用一套鼠标键盘
- 360极速浏览器去广告优化版 v13.0.2101.0
- 这款TWS蓝牙耳机颜值与实用性到底怎么样?
- 随机过程 更新过程(下)
- 不带管理口的mellanox交换机打开端口一分二特性
- live2d sdk java_Unity Live2D SDK的使用方法(一)——载入资源