繁体   English   中英

如何在LWJGL中的3D上渲染具有透明度的2D纹理

[英]How to render 2D textures with transparency on 3D in LWJGL

我一直在尝试在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)

该混合模式取决于顺序。

您将基于颜色缓冲区中已有的值进行混合,并且可能同时写入深度缓冲区。 深度缓冲区不用于对多边形进行重新排序,仅用于测试其创建的片段是否应可见。 由于深度测试会导致二元决策(根据已绘制的内容进行接受/拒绝),因此当需要混合半透明多边形时,这确实使工作变得困难。

如果您不从后到前对半透明多边形进行排序,而是先绘制所有不透明多边形,则半透明多边形会封闭物体,而无法正确混合。

关于透明度排序的这篇文章可能会更清楚地解释我刚才说的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM