OpenGL中的混合 (blend)

  Blend 混合是将源色和目标色以某种方式混合生成特效的技术。混合常用来绘制透明或半透明的物体。在混合中起关键作用的α值实际上是将源色和目标色按给定比率进行混合,以达到不同程度的透明。α值为0则完全透明,α值为1则完全不透明。混合操作只能在RGBA模式下进行,颜色索引模式下无法指定α值。物体的绘制顺序会影响到OpenGL的混合处理。

 

glEnable( GL_BLEND );   // 启用混合

glDisable( GL_BLEND );  // 禁用关闭混合

 

获得混合的信息

glGet( GL_BLEND_SRC );

glGet( GL_BLEND_DST );

glIsEnable( GL_BLEND );

 

glBlendFunc( GLenum sfactor , GLenum dfactor );         // 混合函数

sfactor 源混合因子

dfactor 目标混合因子

混合因子枚举

GL_DST_ALPHA

( Ad , Ad , Ad , Ad )

GL_DST_COLOR

( Rd , Gd , Bd , Ad )

GL_ONE

(1,1,1,1)

GL_ONE_MINUS_DST_ALPHA

(1,1,1,1) - (Ad,Ad,Ad,Ad)

GL_ONE_MINUS_DST_COLOR

(1,1,1,1) - (Rd,Gd,Bd,Ad)

GL_ONE_MINUS_SRC_ALPHA

(1,1,1,1) - (As,As,As,As)

GL_SRC_ALPHA

( As , As , As , As )

GL_SRC_ALPHA_SATURATE

(f,f,f,1) : f = min(As,1-Ad)

GL_ZERO

( 0 , 0 , 0 , 0 )

 

glBlendFunc( GL_ONE , GL_ZERO );        // 源色将覆盖目标色

glBlendFunc( GL_ZERO , GL_ONE );        // 目标色将覆盖源色

glBlendFunc( GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA ); // 是最常使用的

若源色为 ( 1.0 , 0.9 , 0.7 , 0.8 )

源色使用 GL_SRC_ALPHA

即 0.8*1.0 , 0.8*0.9 , 0.8*0.8 , 0.8*0.7

结果为 0.8 , 0.72 , 0.64 , 0.56

 

目标色为 ( 0.6 , 0.5 , 0.4 , 0.3 )

目标色使用GL_ONE_MINUS_SRC_ALPHA

即 1 - 0.8 = 0.2

0.2*0.6 , 0.2*0.5 , 0.2*0.4 , 0.2*0.3

结果为 0.12 , 0.1 , 0.08 , 0.06

由此而见,使用这个混合函数,源色的α值决定了结果颜色的百分比。

这里源色的α值为0.8,即结果颜色中源色占80%,目标色占20%。

 

将多边形从远至近排列,并使用以下函数

glBlendFunc( GL_SRC_ALPHA_SATURATE , GL_ONE );

glEnable( GL_POLYGON_SMOOTH );

可以优化多边形反走样;但必须有α位平面,以用来存储累加的覆盖值。

 

混合 3D 物体

混合 3D 物体时,基本原理和混合2D物体一样,但需要将深度检测关闭或设置为只读。

因为深度检测会剔除被遮挡的部分物体。

 

glEnable( GL_DEPTH_TEST );          // 启用深度缓存

glDisable( GL_DEPTH_TEST );         // 禁用深度缓存

 

glDepthMask( GL_FALSE );              // 深度缓存为 只读

glDepthMask( GL_TRUE );               // 深度缓存为 读/写

 

按以下步骤,可以在 3D 场景中使用混合和深度检测

1、使用深度检测

2、绘制不透明的物体

3、设只读 深度检测

4、绘制半透明的物体

5、设 读/写 深度检测

 

以下对混合算法进行测试,统一使用glBlendFunc(GL_SRC_ALPHA,GL_ONE);模式。

glClearColor(0.0f,1.0f,0.0f,0.5f);               //绿色背景(目标)、先放入帧缓冲区

glColor4f(1.0f,0.0f,0.0f,0.5f);                    //矩形颜色(源色)、片段

计算结果:

 

(0.5f, 1.0f,0.0f,0.75f)

绿色背景,红色矩形

       混合 混合  混合

       关闭混合时                        打开混合时            叠加时颜色

 

结果:

1、背景色也参与混合过程;

2、利用绿色背景测试可得,RGBA中的A值对单一颜色显示没有效果,但混合和

透明是依靠A值计算的;

3、当输入颜色值为RGB时,混合计算时,A值默认为0.0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenGL 3.3 混合blend)和透明(alphablend)是一种图形渲染技术。在OpenGL混合是指将一个物体的颜色与背景颜色进行相互融合,以产生透明或半透明的效果。透明(alphablend)是指对物体表面的透明度进行控制,使得背景能够透过物体显示出来。 要下载OpenGL 3.3的混合和透明技术blend和alphablend),您需要遵循以下步骤: 1. 首先,确保您的计算机已安装支持OpenGL 3.3的图形硬件设备。如果您的计算机不支持该版本的OpenGL,则无法下载。 2. 在您的计算机上安装适当的OpenGL开发环境。可以从官方OpenGL网站或第三方供应商网站下载,并按照说明进行安装。 3. 熟悉OpenGL编程语言和环境。了解如何使用OpenGL混合和透明技术,包括调整透明度、混合模式等。 4. 在互联网上搜索和下载与OpenGL 3.3混合和透明技术相关的示例代码或资料。这些示例代码会指导您如何实现混合和透明效果,并为您提供一个起点来编写自己的代码。 5. 如果您希望使用特定的图形库或框架(如GLFW、FreeGLUT等),请下载并安装它们,以便更方便地使用OpenGL 3.3混合和透明技术。 6. 按照示例代码或教程的说明来编写您自己的程序,并测试它是否能够正确地实现所需的混合和透明效果。 通过以上步骤,您应该能够成功地开始使用OpenGL 3.3混合和透明技术。记住,这是一项技术复杂的任务,需要不断的实践和学习才能掌握。 ### 回答2: 要下载OpenGL 3.3的混合模式(Blend)和透明混合(Alpha Blend)的相关内容,你可以按照以下步骤进行: 1. 首先,打开你喜欢使用的互联网浏览器(例如谷歌浏览器、火狐浏览器等)。 2. 在浏览器的搜索栏输入关键词“OpenGL 3.3 Blend Alpha Blend下载”。 3. 按下回车键,浏览器将显示与你的搜索相关的结果页面。 4. 在搜索结果页面,寻找与你要下载的内容相关的链接。你可以查看每个链接的描述和概述来确定其是否与你的需求相符。 5. 找到一个可靠的来源后,点击链接以访问网站。 6. 在网站上查找下载链接或按钮。一些网站可能需要你注册账户或支付费用才能下载内容。 7. 点击下载链接或按钮,并按照网站上的指示完成下载过程。 请注意,在下载任何内容之前,一定要确保你所使用的来源可靠且安全。最好选择知名的软件下载网站或官方网站以确保下载的文件是可信的。同时,注意防范电脑病毒和恶意软件,建议在下载和打开文件之前进行杀毒扫描。 总结起来,要下载OpenGL 3.3的混合模式和透明混合的内容,你需要使用浏览器搜索相关内容并访问可靠的来源,然后按照指示完成下载过程。记得确保来源可靠、文件安全,并在下载和打开文件前进行杀毒扫描。 ### 回答3: 要下载OpenGL 3.3 blend alphablend,您可以按照以下步骤进行操作: 1. 打开您偏好的浏览器,并搜索OpenGL官方网站。 2. 在OpenGL官网上寻找下载页面或者资源库。 3. 查找OpenGL版本3.3并点击进入。 4. 在资源库或下载页面,寻找与blend和alphablend相关的文件。 5. 确保您选择的文件与您的操作系统兼容,如Windows、Mac OS或Linux。 6. 下载所选文件。这可能需要一段时间,具体取决于您的网络连接速度。 7. 一旦下载完成,您可以在您的计算机上找到下载的文件(通常是一个安装程序或归档文件)。 8. 根据您的需求和操作系统,运行安装程序或解压归档文件。 9. 按照安装程序的指示进行安装,或者将解压的文件复制到您选择的目标文件夹。 10. 一旦安装或复制完成,您就可以在开发环境使用OpenGL 3.3的blend和alphablend功能了。 请注意,具体的下载和安装步骤可能因您的操作系统和开发环境而有所不同。此外,确保您从官方和可信的来源下载文件,以保证其安全性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值