【问题标题】:Libgdx culling between modelinstances decals模型实例贴花之间的 Libgdx 剔除
【发布时间】:2015-08-29 15:54:07
【问题描述】:

我不知道如何告诉 libgdx 在透明贴花后面绘制绿色球体。

这是我的问题的示例图片:

贴花创建:前两个参数是宽度和高度,最后一个标志是否透明。

Decal.newDecal(count * (GUTTER + BUTTONWIDTH) + GUTTER, 2 * GUTTER + BUTTONHEIGHT, 
            new TextureRegion(new Texture(Gdx.files.internal("icons/uibg.png"))), true);

球体创建:

builder.createSphere(
            FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2,
            6, 6,
            new Material(ColorAttribute.createDiffuse(Color.GREEN)),
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);

以及渲染方法:

this.models = new ModelBatch();
this.decals = new DecalBatch(new CameraGroupStrategy(camera));
...
// adding decals and models to render queue
...

public void update(float deltaTime){
    super.update(deltaTime);

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    models.begin(camera);
    for (Entity entity : queue) {
        ModelInstance model = Mappers.Object.get(entity).instance;
        models.render(model, environment);
    }

    decals.flush();

    models.end();
    queue.clear();
}

我感谢每一个建议。

//编辑

为球体添加了 Blending 属性和 0.7 的不透明度。这行得通。但我想问题出在贴花和模型渲染之间,因为背景中的网格是贴花,可以通过黑色透明贴花看到,但球体不能。

新材料代码:

    Material mat = new Material();
    mat.set(ColorAttribute.createDiffuse(Color.GREEN));
    mat.set(new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA, 0.7f));
    fingerTip = builder.createSphere(
            FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2, FINGERTIPRADIUS * 2,
            6, 6,
            mat,
            VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal);

这里是另一张图片:两个中间球体没有按照应有的方式渲染在透明贴花后面。

【问题讨论】:

  • 请给我们一些代码,看看你在做什么。我们只能在这里猜测。例如添加渲染和模型实例创建代码。
  • 您需要添加混合信息,例如materials.get(0).set(new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA));

标签: java libgdx transparent culling


【解决方案1】:

decals.flush() 之前致电models.end()。透明的东西必须在不透明的东西之后绘制。现在您首先绘制贴花,因此它会在绘制球体之前将其深度写入缓冲区。

如果您的模型也是透明的,这会变得更加复杂。您需要以某种方式将贴花与您的模型分类,并在冲洗贴花之前冲洗后部模型,最后冲洗附近的模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多