7

我遇到了具有透明区域的纹理的问题。基本上,它是呈现在立方体上的硬币纹理。我不能让角落看起来透明,它们只是显示为白色/灰色。

我确保启用G20.GL_Blend,所以不可能。

在此处输入图像描述

这是我在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);
4

3 回答 3

10

向模型添加混合属性:

http://www.badlogicgames.com/forum/viewtopic.php?f=11&t=10016&p=45952#p45369

编辑。-链接死了。它是这样的:

modelInstance.materials.get(0).set(
    new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA)
)
于 2013-10-09T20:07:09.657 回答
2

您需要添加一个BlendingAttribute到您的ModelInstance

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

您还可以将它添加到您的模型构建器代码中(您可以在其中创建一个可以创建模型实例的模型):

new Material(
    TextureAttribute.createDiffuse(yourTransparentTexture), 
    new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA))
)
于 2020-08-24T11:34:21.360 回答
-1

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

于 2021-03-26T16:07:06.213 回答