【问题标题】:How to render 2D textures with transparency on 3D in LWJGL如何在 LWJGL 中渲染 3D 透明的 2D 纹理
【发布时间】:2013-09-08 15:28:17
【问题描述】:

我一直在尝试将一些纹理渲染为 3D 世界前的 HUD 的一部分。我已经设置了一些方法,以便可以轻松地在 2D 和 3D 之间切换(setPerspective() 和 setOrtho())。大多数纹理都可以正常工作并显示出我想要的效果,但是我在处理包含透明度的纹理时遇到了一些困难。纹理的透明部分不会变成透明的,而是与背景颜色相同。

我在某处读到我必须先渲染背景,但是当我这样做时,出于某种原因,HUD 似乎根本没有出现。

public static void render() {

    glClear(GL_COLOR_BUFFER_BIT | GL_BIT_BUFFER_BIT);
    glLoadIdentity();

    glClearColor(0.75f, 1, 1, 0);

    setOrtho();
    //2D Here

    setPerspective();
    //3D Here

}

是的,我的代码中确实有这个;

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

【问题讨论】:

    标签: java opengl 3d 2d orthographic


    【解决方案1】:

    混合模式取决于顺序。

    您正在基于颜色缓冲区中已有的值进行混合,并且可能同时写入深度缓冲区。深度缓冲区不用于重新排序多边形,只是为了测试它们创建的片段是否应该可见。由于深度测试会导致二元决策(根据已绘制的内容接受/拒绝),因此在混合半透明多边形时确实很难。

    如果您不从后到前对半透明多边形进行排序并首先绘制所有不透明多边形,那么您的半透明多边形可能最终会遮挡事物而不是正确混合。

    Transparency Sorting上的这篇文章可能会更清楚地解释我刚才所说的。

    【讨论】:

      猜你喜欢
      • 2010-11-21
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多