【问题标题】:Drawing a Mesh and a Texture libgdx绘制网格和纹理 libgdx
【发布时间】:2012-01-14 23:18:11
【问题描述】:
  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();

  }

我正在尝试使用 libgdx 在屏幕上绘制一个三角形和一个圆(来自 png)。

当我运行它时,我只能在屏幕上看到纹理(圆圈)。我应该怎么做才能使网格和纹理都可见?

【问题讨论】:

    标签: java android opengl-es libgdx


    【解决方案1】:

    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();
      

      您必须在 begin() 中重置按批次设置的投影和变换矩阵;因为 SpriteBatch.end() 没有设置矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-04
      • 2014-09-05
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      相关资源
      最近更新 更多