Libgdx 3D纹理透明度

时间:2013-10-01 09:17:57

标签: 3d textures transparency libgdx blending

我在圆柱体上遇到纹理问题。基本上它是一个带有纹理的硬币, 我之前做过这个演示但是丢失了代码。 现在我面临的问题是我不能让硬币的边缘变得透明了。 png的透明部分在圆柱体上显示为白色,甚至是我试过的盒子。

我启用了G20.GL_Blend, 具有alpha_src和one_minus_alpha_src的混合功能,启用了texture_2d之类的功能。 (对于错误的变量名称,仅在我的手机上输入,将改变@home)

我已经尝试过我可以在网上找到的所有内容,但它并没有改变。看起来混合功能根本不会影响纹理。

哦,我正在为这个项目每晚运行一次,之前的那个,当它工作时,它是一个较旧的项目......可能就是这样吗?

希望有人可以提供帮助,如果需要我会回家时发布代码和照片

编辑:

这是我得到的,一个框显示它更好。 Forgott添加定向灯, 灰色是白色,不是灰色!!

enter image description here

这是我在render()方法中使用的代码(我尝试了不同的组合,这就是为什么有这么多):

    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    Gdx.gl20.glEnable(GL20.GL_BLEND);
    Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
    Gdx.gl20.glEnable(GL20.GL_TEXTURE_2D);
    Gdx.gl20.glBlendEquation(GL20.GL_BLEND);

    modelBatch.begin(cam);
    texture.bind();
    modelBatch.render(instance, environment);
    modelBatch.end();

    Gdx.gl20.glDisable(GL20.GL_TEXTURE_2D);

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

在您的ModelInstance上调用它:

modelInstance.materials.get(0).set(
    new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
)

或者,将其传递给您的ModelBuilder代码(您在其中创建可以创建ModelInstances的模型):

new Material(
    TextureAttribute.createDiffuse(yourTransparentTexture), 
    new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA))
)

答案 2 :(得分:0)

ModelBatch.begin(...) 将通过调用 Gdx.gl.glDisable(GL20.GL_BLEND) 禁用混合。因此,请确保在调用 ModelBatch.begin() 后启用混合。

modelBatch.begin(camera); // resets Blending to false
// enable Blending
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
// draw mesh
mesh.render(shader, GL20.GL_TRIANGLES);
modelBatch.end();

来源:https://stackoverflow.com/a/66820414/2413469