10

I'm confused by exactly what this means:

When doing blending for a particular buffer, the color from the fragment output is called the source color. The color currently in the buffer is called the destination color.

(from the OpenGL wiki)

I understand what the blending equation itself is, but I do not understand quite the distinction between source color and destination color.

Can anyone provide an example or more specific definition?

4

2 回答 2

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)

于 2013-04-23T13:40:42.763 回答
1

在桌面 OpenGL 中,片段着色器可以输出多种颜色,而不仅仅是一种。每种颜色都有编号,每个这样的编号都映射到framebuffer 中的输出缓冲区,基于glDrawBuffers.

混合在每个片段着色器输出颜色和当前存储在目标图像中的颜色之间独立进行。所以如果你写两种颜色,混合会在第一种颜色和它的图像之间发生,然后在第二种颜色和它的图像之间发生。

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

于 2013-04-23T13:25:58.607 回答