首页 文章

在libgdx中移动网格的位置

提问于
浏览
2

我有一个带有一些多边形(shapeRenderer)的世界,并希望有一个箭头,当用户改变他的GPS位置时它会移动 . 我以为我可以用网格做,但我没有找到任何选项将网格移动到另一个位置 .

Mesh mesh = new Mesh(true, 6, 0, 
        new VertexAttribute(Usage.Position, 2, "a_position")
);
mesh.setVertices(new float[] { -0.3f, -0.3f,
            0   , 0,
            0f  , 0.7f,
            0   , 0,
            0.3f, -0.3f,
            0f  , 0.7f  });
mesh.render(GL10.GL_TRIANGLE_STRIP, 0, 6);

是否可以选择更改整个网格的位置?或者我可以获得所有顶点以创建具有新位置的新网格?

2 回答

  • 2

    我知道这是旧的,但我做的是

    mesh.transform(matrix);
    mesh.render();
    mesh.transform(matrix.inv());
    
  • 3

    (至少)有几种“移动”网格的方法 . Libgdx没有针对此的特定支持,它与任何OpenGL应用程序具有相同的选项:

    • 更改顶点

    • 使用翻译矩阵

    • 将网格渲染为纹理并移动纹理

    change the vertices ,当你想要"move"网格时,你必须跟踪 float[] 并改变它(或重新创建它) . 您可以使用新数据再次调用 setVertices .

    对于 translation matrix 方法,请参阅How do I rotate or translate individual object instances in OPENGL?但是,请注意,这主要是因为最近的OpenGL API而被弃用 . (我'm not entirely clear with what they replaced it with, though: I think you'应该自己做矩阵数学,这基本上是选项#1 . )

    对于 render to texture 选项,使用Libgdx FrameBuffer object,渲染到该选项,然后使用Libgdx Sprite移动/渲染该纹理 . 请注意, Sprite 实现只是 Build 在一个简单的顶点四边形上,并且实际上是为了在屏幕上移动精灵,所以只有当你的网格真的很复杂且有很多顶点时,这个选项才有意义 .

    嗯......既然我已经写完了,看起来这三个都归结为选项1:你应该自己跟踪网格顶点的实际位置 .

相关问题