【问题标题】:OpenGL: Achieve same transparency with white backgroundOpenGL:实现与白色背景相同的透明度
【发布时间】:2014-09-10 21:55:08
【问题描述】:

我有一个 OpenGL 应用程序,它显示了一个透明管道和一些流过它的彩色液体。

图中左边是空的,右边是满的。

当我将背景更改为白色时,透明管道消失了(我猜它也会因为混合而变成白色)。

我使用以下 GL 代码:

gl.glColor4d( 240, 240, 240, 0.1); // transparent color
gl.glEnable( gl.GL_BLEND );
gl.glBlendFunc( gl.GL_SRC_ALPHA, gl.GL_ONE );
glu.gluCylinder( quadObj, width, width, length, 32, 1 );

我应该如何调整混合功能(和/或颜色,如有必要)以在白色背景下实现相同的效果?

【问题讨论】:

    标签: opengl transparency blending


    【解决方案1】:

    我建议glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

    顺便说一句。进入glColor…{f,d} 的值被裁剪到[0,1] 范围内。我建议你尝试一些浅灰色的外管,即glColor4f(0.75, 0.75, 0.75, 0.1)

    还要注意,OpenGL 透明度不是顺序无关的。面必须从后到前排序才能正常工作(如果您查看图片中圆柱体的远端,您会看到它错过了背面,这可能是因为它是最后绘制的,但随后它已经被圆柱体的其余部分遮挡了。

    更新: 透明顺序问题有一个简单的解决方法:在启用面剔除的情况下绘制两次圆柱体。第一步绘制正面剔除,然后绘制第二次剔除背面:

    glEnable(GL_CULL_FACE);
    glCullFace(GL_FRONT);
    gluCylinder( quadObj, width, width, length, 32, 1 );
    glCullFace(GL_BACK);
    gluCylinder( quadObj, width, width, length, 32, 1 );
    glDisable(GL_CULL_FACE);
    

    【讨论】:

    • 谢谢,它有效!显然,黑色版本只是运气不好^^
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 2011-03-31
    • 2014-08-21
    • 2013-12-15
    • 2013-04-03
    • 2015-07-03
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多