【问题标题】:Additive Blending with white Background与白色背景的添加剂混合
【发布时间】:2015-12-12 12:44:31
【问题描述】:

我搜索了一段时间,但找不到问题的答案。

我正在尝试在包含白色的图像前面添加一个透明对象。为此,我使用附加透明度

//enable trancparency
glEnable(GL_BLEND);
// disable backface culling
glDisable(GL_CULL_FACE);
// disable depth buffer writing
glDepthMask(GL_FALSE);
// additive blending
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

它看起来像这样知道。 White background still white

我尝试添加

glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE);

有没有办法说opengl当他将红色添加到白色时应该使用红色而不是白色?

对不起,我的英语不好,但我希望有人能理解我的问题并可以帮助我!

非常感谢!!!

【问题讨论】:

    标签: opengl glsl rendering transparent


    【解决方案1】:

    有没有办法说opengl当他将红色添加到白色时应该使用红色而不是白色?

    当然不是;这不可能。好吧,对于非 HDR 渲染。

    您的(非 HDR)颜色被限制在 [0, 1] 范围内。白色被定义为所有三个通道的 1.0。您添加的结果仍将被限制为 [0, 1]。所以 1 + something 仍然是 1。而 1 + 0 仍然是 1。

    您不能使颜色通道比白色更白。

    您可能想要线性插值混合,而不是加法:

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    

    加法混合只能在非 HDR 渲染系统中少量使用。

    【讨论】:

    • 我试过这个,但知道根本没有球体,只有我的背景图像!我错过了什么吗?
    • @mausi:“你不能让颜色通道比白色更白”的哪一部分你不明白?为白色添加颜色仍会使其变为白色。
    • 这不是重点。我尝试了线性插值,这听起来比加法更好。但是有了这个,根本就没有球体。在我看来,它应该是与以前相同的解决方案,白色 = 白色,在背景中有黑色的地方,我得到了我的红色球体。还是我错了?
    猜你喜欢
    • 2014-01-14
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多