【发布时间】: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