Рисование сетки и текстуры libgdx - PullRequest
3 голосов
/ 15 января 2012
  private Mesh mesh;
  private Texture texture;

  private SpriteBatch batch;

  @Override
  public void create() {
    if (mesh == null) {
      mesh = new Mesh(true, 3, 3, new VertexAttribute(Usage.Position, 3,
          "a_position"));

      mesh.setVertices(new float[] { -0.5f, -0.5f, 0, 
          0.5f, -0.5f, 0, 
          0, 0.5f, 0 });

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

      texture = new Texture(Gdx.files.internal("data/circle.png"));

      batch = new SpriteBatch();
    }

  }

  @Override
  public void render() {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    batch.begin();

    mesh.render(GL10.GL_TRIANGLES, 0, 3);
    batch.draw(texture, 10, 10);

    batch.end();

  }

Я пытаюсь нарисовать треугольник и круг (из png) на экране, используя libgdx.

Когда я запускаю это, я вижу только текстуру (круг) на экране. Что я должен сделать, чтобы сделать видимыми сетку и текстуру?

1 Ответ

4 голосов
/ 15 января 2012

SpriteBatch использует матрицу ортографической проекции.Когда вы вызываете batch.begin (), он применяет свои матрицы (см. SpriteBatch.setupMatrices ().

Так что либо:

  1. измените вершины для сетки, так что этона экране:

    mesh.setVertices(new float[] { 100f, 100f, 0, 
              400f, 100f, 0, 
              250, 400f, 0 });
    
  2. убрать рендеринг сетки из пакетного рендеринга:

    Gdx.gl10.glMatrixMode(GL10.GL_PROJECTION);
    Gdx.gl10.glLoadIdentity();
    Gdx.gl10.glMatrixMode(GL10.GL_MODELVIEW);
    Gdx.gl10.glLoadIdentity();
    mesh.render(GL10.GL_TRIANGLES, 0, 3);
    
    batch.begin();
    batch.draw(texture, 10, 10);
    batch.end();
    

    необходимо сбросить матрицы проекции и преобразования, установленные партиями в начале(); потому что SpriteBatch.end () не устанавливает матрицы обратно.

...