当前位置: 代码迷 >> java >> 无法使用纹理渲染libGDX
  详细解决方案

无法使用纹理渲染libGDX

热度:71   发布时间:2023-08-02 10:40:44.0

我试图用纹理渲染网格(以编程方式创建)。 一切正常,除了不渲染纹理。 这只是一个黑色的三角形。 这是代码的简化版本(也不起作用):

public ModelBatch batch;
public OrthographicCamera cam;
public Renderable renderable;

@Override
public void create () {
    cam = new OrthographicCamera(5, 5);
    batch = new ModelBatch();

    Mesh mesh = new Mesh(true, 3, 3,
            new VertexAttribute(VertexAttributes.Usage.Position, 2, "a_position"),
            new VertexAttribute(VertexAttributes.Usage.TextureCoordinates, 2, "a_texCoord")
    );

    mesh.setVertices(new float[]{
            0, 0,   0, 0,
            1, 0,   1, 0,
            1, 1,   1, 1
    });
    mesh.setIndices(new short[]{
            0, 1, 2
    });

    renderable = new Renderable();
    renderable.primitiveType = GL20.GL_TRIANGLES;
    renderable.mesh = mesh;
    renderable.meshPartOffset = 0;
    renderable.meshPartSize = mesh.getNumIndices();
    renderable.material = new Material(TextureAttribute.createDiffuse(new Texture("badlogic.jpg")));
}

@Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.begin(cam);
    batch.render(renderable);
    batch.end();
}

我解决了问题。 我应该以这种方式创建网格:

Mesh mesh = new Mesh(true, 3, 3,
        new VertexAttribute(VertexAttributes.Usage.Position, 2, "a_position"),
        new VertexAttribute(VertexAttributes.Usage.TextureCoordinates, 2, "a_texCoord0")
);

区别在于,现在纹理坐标属性中的别名是a_texCoord0而不是a_texCoord。