【问题标题】:Texture is displayed in the wrong order纹理以错误的顺序显示
【发布时间】:2019-12-17 10:44:25
【问题描述】:

我正在尝试使用 libgdx 渲染三个带有纹理的立方体,但它们渲染不正确。先绘制远处的纹理,然后绘制近处的纹理。你能帮我解决一下吗?

示例:

这里是Block类:

public abstract class Block {

    private int x, y, z;

    private ModelInstance model;

    public Block(int x, int y, int z){
        this.x = x;
        this.y = y;
        this.z = z;
        OnCreate();
    }

    public abstract void OnCreate();

    public void onDraw(){
        Main.modelBatch.render(model);
    }

    public void setTexture(Texture texture){
        ModelBuilder modelBuilder = new ModelBuilder();
        modelBuilder.begin();

        Material material = new Material(TextureAttribute.createDiffuse(texture));
        int attributes = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates;

        modelBuilder.part("left", GL20.GL_TRIANGLES, attributes, material).rect(
                createVector(0, 1, -1),
                createVector(0, 0, -1),
                createVector(0, 0, 0),
                createVector(0, 1, 0),
                null
        );
        modelBuilder.part("right", GL20.GL_TRIANGLES, attributes, material).rect(
                createVector(1, 1, 0),
                createVector(1, 0, 0),
                createVector(1, 0, -1),
                createVector(1, 1, -1),
                null
        );
        modelBuilder.part("top", GL20.GL_TRIANGLES, attributes, material).rect(
                createVector(0, 1, -1),
                createVector(0, 1, 0),
                createVector(1, 1, 0),
                createVector(1, 1, -1),
                null
        );
        modelBuilder.part("bottom", GL20.GL_TRIANGLES, attributes, material).rect(
                createVector(0, 0, 0),
                createVector(0, 0, -1),
                createVector(1, 0, -1),
                createVector(1, 0, 0),
                null
        );

        modelBuilder.part("front", GL20.GL_TRIANGLES, attributes, material).rect(
                createVector(0, 1, 0),
                createVector(0, 0, 0),
                createVector(1, 0, 0),
                createVector(1, 1, 0),
                null
        );

        this.model = new ModelInstance(modelBuilder.end());
    }

    private Vector3 createVector(float n1, int n2, int n3){
        return new Vector3(n1 + x, n2 + y, n3 + z);
    }

}

【问题讨论】:

  • 不确定到底发生了什么。但在我看来,您需要turn on depth testing。 '害怕我不知道如何在 libgdx 中做到这一点。
  • 如果您找到了问题的解决方案,请不要将解决方案编辑到您的问题中,而是将其作为问题的答案发布。我已回滚您的编辑。

标签: java opengl libgdx textures render


【解决方案1】:

camera.near 应该大于零(我什至不知道它是如何工作的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多