简述mfc和opengl。在颜色设置上有什么不同

简述mfc和opengl。在颜色设置上有什么不同,第1张

具体如下:

1、OpenGL会计算两点顶点之间的其它点,并为它们填上合适的颜色,颜色对比度比较高。

2、mfc工具的颜色比较淡,颜色偏灰色,给人不真实的感觉。

一、原因

那么如果开启深度测试后.但是2个重叠的图层中, 有⼀个图层是半透明的. 有⼀个图层是⾮半透明的. 

那么此时就不能进⾏单纯的 ⽐较深度值,然后进⾏覆盖. 显示如下图所示:

未使用混合时的显示

其实上面的这样的显示明显是不正确的,为了解决这样的问题,我们需要使用混合。

在OpenGL中,物体透明技术通常被叫做混合(Blending)。

我们先来看看使用混合时显示,如下图所示:

使用混合时的显示

二、混合颜色

目标颜色 已经存储在颜色缓存区的颜色值

源颜色 作为当前渲染命令结果进入颜色缓存区的颜色值

当混合功能被启动时,源颜色和⽬标颜色的组合方式是混合方程式控制的。在默认情况下,混合⽅方程式如下所示:

Cf = (Cs * S) + (Cd * D)

Cf :最终计算参数的颜色

Cs : 源颜色

Cd :目标颜色

S:源混合因子

D:⽬标混合因子

三、如何使用

1. 开启OpenGL的混合功能

glEnable(GL_BLEND)

2.关闭OpenGL的混合功能

glDisable(GL_BLEND)

3.设置混合因子

glBlendFunc(GLenum S,GLenum D)

S:源混合因⼦子

D:⽬目标混合因⼦子

混合因子如下图:

表中R、G、B、A 分别代表 红、绿、蓝、alpha。 

表中下标S、D,分别代表源、⽬标 

表中C 代表常量颜⾊(默认⿊⾊)

四、模拟案例

下⾯通过一个常见的混合函数组合来说明问题:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 如果颜⾊缓存区已经有一种颜色红色(1.0f,0.0f,0.0f,0.0f),这个目标颜色Cd,如果在这上面用⼀种alpha为0.6的蓝⾊色(0.0f,0.0f,1.0f,0.6f)

Cd (⽬目标颜⾊色) = (1.0f,0.0f,0.0f,0.0f)

Cs (源颜⾊色) = (0.0f,0.0f,1.0f,0.6f)

S = 源alpha值 = 0.6f

D = 1 - 源alpha值= 1-0.6f = 0.4f

⽅方程式Cf = (Cs * S) + (Cd * D)

等价于 = (Blue * 0.6f) + (Red * 0.4f)

五、修改颜⾊混合⽅程式

默认混合⽅程式: 

Cf = (Cs * S) + (Cd * D) 

实际上远不⽌这⼀种混合⽅程式,我们可以从5个不同的⽅程式中进⾏选择 :

1.//选择混合⽅程式的函数: 

2.glbBlendEquation(GLenum mode) 

1 常量混合颜⾊,默认初始化为⿊⾊(0.0f,0.0f,0.0f,0.0f),但是还是可以修改这个常量混 

合颜⾊。 

2 void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclam 

pf alpha )

除了能使用glBlendFunc 来设置混合因子,还可以有更灵活的选择:

void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB ,GLenum strAlpha,GLenum dstAlpha)

strRGB: 源颜色的混合因子

dstRGB: ⽬标颜色的混合因子

strAlpha: 源颜色的Alpha因子

dstAlpha: ⽬标颜色的Alpha因子

glBlendFunc指定源和⽬标 RGBA值的混合函数

glBlendFuncSeparate函数则允许为RGB 和 Alpha 成分单独指定混合函数

GL_CONSTANT_COLOR、GL_ONE_MINUS_CONSTANT_COLOR、GL_CONSTANT_ALPHA、GL_ONE_MINUS_CONSTANT值允许混合方程式中引入一个常量混合颜色。

常量混合颜色,默认初始化为⿊色(0.0f,0.0f,0.0f,0.0f)

修改常量混合颜色

void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclampf alpha )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11030582.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存