【问题标题】:Can you render two quads with transparency at the same point?你能在同一点渲染两个透明的四边形吗?
【发布时间】:2010-11-11 10:39:57
【问题描述】:

我正在学习如何使用 JOGL 和 OpenGL 来渲染纹理映射的四边形。我有一个测试程序和一个测试四边形,我想出了如何启用 GL_BLEND 以便我可以指定一个顶点的 alpha 值来制作一个具有某种渐变的四边形......但现在我希望这个显示出来另一个纹理四边形在同一位置。

绘制两个顶点位置相同的四边形不起作用,它只渲染第一个四边形。那么这是可能的,还是我需要根据我想要的内容即时构建一个自定义纹理,然后用这个纹理绘制一个四边形?我真的希望在这种情况下利用混合的优势......

【问题讨论】:

  • 看看你正在使用哪个 glDepthFunc,也许你正在使用 GL_LESS/GL_GREATER,如果你正在使用 GL_LEQUAL/GL_GEQUAL,它可能会起作用——尽管如果透明度是,这可能无关紧要参与。
  • schnaader,这就是诀窍!如果您在下面发布解释它的答案,我会投票并接受它。我没有启用 GL_DEPTH_TEST,一旦我启用它并将功能设置为 GL_LEQUAL,它就起作用了。
  • 酷,发布了答案。

标签: opengl jogl


【解决方案1】:

看看你使用的是哪个 glDepthFunc,也许你使用的是GL_LESS/GL_GREATER,如果你使用的是GL_LEQUAL/GL_GEQUAL,它可能会工作。

【讨论】:

    【解决方案2】:

    很难弄清楚你到底想要达到什么目标,但这里是一个尝试

    要使透明度在 OpenGL 中正常工作,您需要从最远到最近的相机绘制多边形。如果你的场景是静态的,这绝对是你可以做的。但如果它在旋转和移动,那么这通常是不可行的,因为您必须对每一帧的多边形进行排序。

    可以在这个常见问题页面中找到更多信息:
    http://www.opengl.org/resources/faq/technical/transparency.htm

    【讨论】:

      【解决方案3】:

      对于 Alpha 混合,渲染器在渲染透明对象时混合当前透明对象后面的所有颜色(从相机的角度来看)。如果先渲染透明对象,则其后面没有可混合的对象。如果它是第二个渲染的,它将有一些可以与之混合的东西。

      尝试先渲染不透明的四边形,然后再渲染透明的四边形。另外,请确保您的不透明四边形稍微落后于透明四边形(相对于相机),这样您就不会出现 z 缓冲区条纹。

      【讨论】:

        猜你喜欢
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 2010-09-28
        • 2012-01-15
        相关资源
        最近更新 更多