【问题标题】:libGDX renders PNG transparency incorrectlylibGDX 错误地渲染 PNG 透明度
【发布时间】:2017-10-30 10:17:22
【问题描述】:

我已经搜索了多个论坛,但仍然找不到。这是图像: Sample

我添加了BlendingAttribute,但一些(不是全部)纹理仍然渲染不正确。那些尖头的脸应该是透明的。这是我的sn-p:

private void doneLoading() {

    terrain = assets.get("xx.g3db", Model.class);
    terrainInstance = new ModelInstance(terrain);
    for(n = 2; n < terrainInstance.materials.size; n++){
        terrainInstance.materials.get(n).set(new BlendingAttribute(GL30.GL_SRC_ALPHA, GL30.GL_ONE_MINUS_SRC_ALPHA)); // this should working for all faces
    }
    instances.add(terrainInstance);
    loading = false;
}

@Override
public void render() {
    if (loading && assets.update()) {
        doneLoading();
    }
    personcam.update(Gdx.graphics.getDeltaTime());

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glTexParameteri(GL30.GL_TEXTURE_2D, GL30.GL_TEXTURE_MAG_FILTER, GL30.GL_NEAREST);
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT);

    modelBatch.begin(cam);
    modelBatch.render(instances, environment);
    modelBatch.end();

}

我检查了我的纹理文件,它们都很好。我的 FBX 文件(我正在使用 SketchUp 8)也很好。为什么有些面不能正确渲染透明度?这是bug吗?

【问题讨论】:

  • Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT | GL30.GL_DEPTH_BUFFER_BIT); 行是否正确?一个常见的错误是省略了第二个管道符号。除此之外,我不确定问题是什么。
  • 是的,没错

标签: libgdx png


【解决方案1】:

通过添加一行找到:

terrainInstance.materials.get(n).set(new FloatAttribute(FloatAttribute.AlphaTest, 0.8f));

for 循环中修复了透明度问题。

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2011-12-08
    相关资源
    最近更新 更多