Alpha启用与混合启用

时间:2011-07-18 01:14:38

标签: opengl graphics directx rendering

在尝试找出渲染术语时,我发现了这个问题,因为我看不出差异。

“启用Alpha”和“启用混合”之间有什么区别?

4 个答案:

答案 0 :(得分:4)

  

" Alpha Enabled"有什么区别?和"混合启用"?

该问题假定这些术语具有唯一的命名约定。举个例子,我从来没有听说过#alpha; alpha启用这个词,而且我已经处理了图形和OpenGL超过10年了。你在哪里找到这个词?

OpenGL确实定义了术语"混合。"

Blendingrendering pipeline的阶段,其中来自每片段操作的输出(也就是:片段着色器。或者,如果你进入那种东西,那么固定功能纹理环境管道)与目标图像中当前的值组合,以计算写入目标的最终颜色。

上述链接应该满足您解释这些内容如何运作的需求。混合通常用于使对象看起来透明,但这不是使用。

现在,也许" alpha启用"意味着alpha测试。这是一个较旧的功能(deprecated in GL 3.0 and removed in GL 3.1。您可以使用compatibility context来获取它),其中由片段着色器或固定功能管道写入的颜色经过了alpha测试反对预设值。如果测试失败,则片段被剔除:不写入帧缓冲区。常见的测试是#34;片段α> 0.5&#34 ;;因此,对于alpha值较低的颜色,片段根本不会被写入。

从GL 3.1及更高版本中删除了alpha测试,因为您可以使用着色器逻辑获得相同的效果:

if(myOutputColor.a < 0.5) discard;

同样的效果;你甚至可以制作&#34; 0.5&#34;着色器用户传入的统一值。并且您有一种真正的方法来定义alpha测试如何与多个片段着色器输出交互。

答案 1 :(得分:3)

OpenGL手册页是一个很好的资源。 glEnable的页面显示:

Alpha测试:如果启用,请进行alpha测试。请参阅glAlphaFunc

混合:如果启用,则将计算的片段颜色值与颜色缓冲区中的值混合。请参阅glBlendFunc

答案 2 :(得分:2)

如果没有更多的背景,我不能非常具体,但我会尝试。

Alpha表示透明度/不透明度,通常在纹理/颜色(alpha通道)的上下文中。混合意味着您以某种方式组合了多种颜色来源。

混合可以并且经常包括alpha(“alpha混合”可能是与3D图形中传统透明度最接近的类似物,因为它只是使用alpha通道作为不透明度来混合对象和它背后的场景)但是,混合也可以通过其他方式完成。这些包括添加和调制混合,产生类似的效果(“透明度”,对象与其背后的场景混合),但不是使用alpha通道,而是添加或增加(或其他一些,更复杂的 操作)渲染对象时的颜色。

Alpha也可用于在渲染对象时完全拒绝碎片(如果alpha低于设定的阈值,则丢弃碎片)。

所以在这种情况下,我怀疑你正在使用的是区分alpha拒绝和各种混合模式(可能包括alpha混合)。

答案 3 :(得分:1)

获得更多的上下文(例如OpenGL编程)会很不错 - 术语在不同的标准,公司,软件和学科中可能会出乎意料地不一致。

This article从OpenGL角度来看它,你可以将alpha视为透明度。 Alpha通常是指颜色(ARGB)或纹理(alpha通道)的透明度。对于OpenGL来说,这有点细微差别。

  

15.010透明,半透明和混合基元有什么区别?

     

透明的物理材质显示其背后的物体不显眼,并且不会反射其表面的光线。透明玻璃是一种几乎透明的材料。虽然玻璃允许大多数光线通过不显眼,但实际上它也反射了一些光线。完全透明的材料是完全不可见的。

     

半透明的物理材料显示其背后的物体,但这些物体被半透明材料遮挡。此外,半透明材料反射一些光线,使材料可见。半透明材料的物理实例包括透明布,薄塑料和烟熏玻璃。

     

透明和半透明通常用于同义词。既不透明也不透明的材料是不透明的。

     

混合是OpenGL的机制,用于将帧缓冲区中已有的颜色与传入原语的颜色相结合。然后将该组合的结果存储回帧缓冲区。混合经常用于模拟半透明物理材料。一个例子是渲染汽车的烟熏玻璃挡风玻璃。驱动器和内部仍然可见,但它们被烟熏玻璃的深色遮挡。