【问题标题】:How of use glBlendFunc to approximate a Photoshop Difference composite?如何使用 glBlendFunc 来近似 Photoshop 差异合成?
【发布时间】:2012-06-24 20:04:48
【问题描述】:

我正在使用 glBlendFunc() 将一张图像合成到另一张图像上,试图近似 Photoshop 的差异合成功能。我希望两个图像中的相似之处是黑色的,而弹出任何不同的东西。

据我了解,glBlendfunc() 与上下文中合成的任何图像相关联。对吗?

【问题讨论】:

    标签: opengl opengl-es opengl-3 nsopenglview


    【解决方案1】:

    我真的想不出任何方法可以用 glBlendFunc 做到这一点。你可以使用这样的东西:

    glBlendEquation(GL_FUNC_SUBTRACT);
    glBlendFunc(GL_ONE, GL_ONE);
    

    但它只有在第二个纹理的大小比第一个更大时才有效(任何负的减法结果都将被钳制为零)。

    我建议使用多重采样着色器同时对两个纹理进行采样,并将结果作为绝对差值输出。

    gl_FragColor = abs(texture2D(tex1, uv) - texture2D(tex2,uv));
    

    【讨论】:

    • texture2D 是 DirectX 函数吗?我正在尝试做的事情我可以在 OSX 上使用 CoreImage 过滤器来完成,但出于性能原因,我正在尝试使用 CoreImage。
    • texture2D 是一个 GLSL 函数。您是否熟悉着色器编程? @kernelK
    • 我不是很遗憾。但现在我知道它是 GLSL 的一部分,我会进一步研究。
    • 在 OpenGL 中进行图像处理的最佳资源是 GLSL Shader Orange Book。本书提供了在片段着色器中合成纹理时计算各种混合函数的大量示例。
    猜你喜欢
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多