如何在OpenGL中将两种颜色混合在一起?

时间:2014-03-26 09:31:47

标签: opengl

我呈现蓝色和红色线(在立体照片的上下文中)。当红线和蓝线重叠时,我想要呈现紫色而不是前面的线。

我正在使用OpenGL。到目前为止,我尝试过的一些代码是:

glBlendFunc(GL_ONE, GL_DST_ALPHA);

这会导致重叠呈现白色,并且该行显示如下:

我认为在这种混合之上使用RGB比例因子是正确的做法。

所以我尝试使用带参数的glBlendFuncSeparate

  1. 源因子RGB
  2. 目标因子RGB
  3. Source Factor Alpha
  4. 目标因素Alpha
  5. 我找不到让这对我有用的参数。

    我还试图将glBlendEquation与附加方程式一起使用,但没有注意到该方法有任何成功。

    如何生成将两条线成功混合成紫色的功能?

    编辑:

    我注意到glBlendFunc(GL_ONE, GL_DST_ALPHA)确实执行了一些混合来产生中间色(实际的线条在这里只是无意义,只是为了显示一些混合)。 enter image description here

2 个答案:

答案 0 :(得分:2)

  

我呈现蓝色和红色线(在立体照片的上下文中)

不是您期望的答案,但您需要的答案:在OpenGL 中渲染浮雕图像的常用方法不是来使用混合。混合很难做到正确,你不想用浮雕部分进一步弄乱。

有两种常用方法:

  • 将每个视图渲染为FBO附加纹理,并在后处理步骤中将它们组合。

  • 使用glColorMask为每个渲染步骤选择活动颜色通道。

我认为现在你对彩色遮罩方法很满意:按照以下方式做到:

display:
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glViewport(…)

    # prepare left view
    setup_left_view_projection()
    glColorMask(1,0,0, 1); # red is commonly used for the left eye

    draw_scene()

    glClear(GL_DEPTH_BUFFER_BIT) # clear the depth buffer (and just the depth buffer!)

    # prepare right view
    setup_right_view_projection()
    glColorMask(0,1,1, 1); # cyan is commonly used for the right eye

    draw_scene()

答案 1 :(得分:1)

典型的混合函数是glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);;请注意,最终颜色会根据绘制顺序而变化。

混合功能不是那么明显,所以图形表示有时会更好;请查看示例this网站。