【问题标题】:OpenGL Render To Texture Transparency ProblemOpenGL渲染到纹理透明度问题
【发布时间】:2011-01-20 17:39:40
【问题描述】:

我构建了一个“后处理管道”,它收集渲染调用并将它们放入纹理中。渲染完所有后处理效果后,我将所有结果放在一起。这是我的问题:

一开始,我使用 glClearColor(0,0,0,0) 清除缓冲区。然后我调用绘图调用。当对象具有 0.5 alpha 的纹理时出现。这导致背景颜色和纹理之间的混合。我想避免混合。例如,如果纹理的像素为 0.5、0.5、0.5、0.5,则结果为 0.25、0.25、0.25、0.5,因为透明度为零的黑色背景受到影响。

我使用 glCopyTexImage2D 函数将渲染结果放入纹理中。我阅读了有关使用帧缓冲区的文章,但我想确定是否可以解决使用多个帧缓冲区的问题。

有人对我有什么建议吗?

【问题讨论】:

    标签: c++ windows opengl graphics glew


    【解决方案1】:

    您可以尝试在绘图时使用预乘 alpha。基本上,确保所有颜色值已经乘以 alpha 值。然后,而不是

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    

    你会使用

    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
    

    纹理的像素将是 0.25、0.25、0.25、0.5。结果将是 0.25, 0.25, 0.25, 0.5,因为这都是乘以 1。当然,您必须确保生成的输出纹理再次被正确解释为具有预乘 alpha。

    在维基百科的dusty corner 中有一个很好的解释。

    【讨论】:

    • 感谢您的回答。我今晚或明天检查并给你结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2014-08-12
    相关资源
    最近更新 更多