Libgdx:SpriteBatch.draw spriteVertecies wierd UV coords行为

时间:2016-08-31 20:31:20

标签: java opengl libgdx

我正在尝试显示一个简单的纹理梯形(透视中的道路)。为此,我使用SpriteBatch.draw顶点数组作为参数。但结果出乎意料。

我的期望: enter image description here

我得到了什么: enter image description here

究竟出了什么问题?或者我可能使用了错误的方法?

以下是代码:

@Override
public void create () {
    texture = new Texture("road.jpg");

    spriteBatch = new SpriteBatch();

    float color = Color.toFloatBits(255, 255, 255, 255);

    verts = new float[]{
            0,                              0,      color, 0, 0,
            Gdx.graphics.getWidth()/2-100,  300,    color, 0, 1,
            Gdx.graphics.getWidth()/2+100,  300,    color, 1, 1,
            Gdx.graphics.getWidth(),        0,      color, 1, 0,
    };

    shapeRenderer = new ShapeRenderer();
}

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

    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
    shapeRenderer.rect(0, 0, 640, 300);
    shapeRenderer.end();

    spriteBatch.begin();
    spriteBatch.draw(texture, verts, 0, verts.length);
    spriteBatch.end();
}

1 个答案:

答案 0 :(得分:0)

来自documentation

  

draw(Texture texture, float[] spriteVertices, int offset, int count)

     

使用给定的顶点绘制一个矩形。

LibGDX将这些矩形绘制为两个三角形,因此它会分割纹理。问题是矩形中的这些三角形大小相同,但在梯形中它们不是,因此它们会变形。

解决方案是使用投影或网格。

Image showing real UV mapping Texture UV mapping