OpenGL混合; “源颜色”和“目标颜色”到底指的是什么,并带有示例

标签 opengl

我对这到底是什么意思感到困惑:

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)

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

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

最佳答案

为了简单明了:

  • 源颜色:这是您当前正在使用的颜色。例如,当您使用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)

    关于OpenGL混合; “源颜色”和“目标颜色”到底指的是什么,并带有示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169844/

    相关文章:

    java - 方法 "glActiveTexture"不可用

    c++ - OpenGL 代码适用于 Windows 但不适用于 Mac

    c++ - 如何变换骨骼动画的顶点?

    c++ - QImage内存不足

    c++ - OpenGL 纹理映射空白屏幕

    linux - 无法将浮点值传递给 GLSL?

    c++ - 离屏渲染到帧缓冲区

    c++ - 混合 VBO 和非 VBO 渲染的 Opengles 给出 EXC_BAD_ACCESS

    c++ - 文本在窗口 Opengl 上不可见

    C++ - std::thread 在执行时崩溃