OpenGL混合;通过示例,源颜色和目标颜色究竟是指什么

时间:2013-04-23 12:51:56

标签: opengl

我对这意味着什么感到困惑:

  

对特定缓冲区进行混合时,片段输出中的颜色称为源颜色。缓冲区中当前的颜色称为目标颜色。

from the OpenGL wiki

我理解混合方程本身是什么,但我不完全理解源颜色目标颜色之间的区别。

任何人都可以提供示例或更具体的定义吗?

2 个答案:

答案 0 :(得分:8)

保持简短:

  • 源颜色:这是您当前使用的颜色。例如,当您使用glColor4f(...)时,您可以设置操作的源颜色。
  • 目标颜色:在视频缓冲区的某个坐标中,这是片段的颜色(像素,如果你更喜欢这样思考,虽然它不一定相同)。

通常,人们之所以使用:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

是因为您想使用刚才提供的alpha值。您可以使用它来乘以当前颜色,然后使用(1 - alpha)并使用它来乘以该坐标中缓冲区的当前颜色。

因此,如果使用glColor4f(1.0f,1.0f,1.0f,0.6f)绘制四边形并且缓冲区填充glColor4f(1.0f,0.0f,0.0f,1.0f),则最终操作将是:

(1.0f, 1.0f, 1.0f) * ALPHA + (1.0f, 0.0f, 0.0f) * (1 - ALPHA)
(0.6f, 0.6f, 0.6f) + (0.4f, 0.0f, 0.0f)

所以最终的颜色是(1.0f,0.6f,0.6f)

答案 1 :(得分:1)

在桌面OpenGL中,片段着色器可以output multiple colors,而不仅仅是一个。每种颜色都有编号,每个这样的数字都会根据an output buffer in the framebuffer映射到glDrawBuffers

在每个片段着色器输出颜色和当前存储在目标图像中的颜色之间独立进行混合。因此,如果您编写两种颜色,则会在第一种颜色与其图像之间进行混合,然后在第二种颜色与其图像之间进行混合。

对于每个混合操作,源颜色是片段着色器写入输出变量的颜色。目标颜色是帧缓冲区图像中与特定片段着色器输出对应的颜色(基于glDrawBuffers映射)。所以源颜色来自片段着色器,目标颜色来自帧缓冲图像。