在libgdx中移动网格的位置

在libgdx中移动网格的位置,libgdx,Libgdx,我有一个有一些多边形(ShaperEnder)的世界,希望有一个箭头,当用户改变他的GPS位置时,它会移动。我想我可以用网格来做,但是我没有找到任何选项来将网格移动到另一个位置 Mesh mesh = new Mesh(true, 6, 0, new VertexAttribute(Usage.Position, 2, "a_position") ); mesh.setVertices(new float[] { -0.3f, -0.3f, 0 ,

我有一个有一些多边形(ShaperEnder)的世界,希望有一个箭头,当用户改变他的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);
是否有更改整个网格位置的选项?或者我可以让所有顶点使用新位置创建新网格吗?

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

  • 更改顶点
  • 使用翻译矩阵
  • 将网格渲染为纹理并四处移动纹理
  • 若要更改顶点,必须跟踪
    浮动[]
    ,并在要“移动”网格时对其进行变异(或重新创建)。您可以使用新数据再次调用
    setVertices

    对于转换矩阵方法,请参见,请注意,最新的OpenGL API大多不推荐这种方法。(不过,我并不完全清楚他们用什么来取代它:我认为你应该自己做矩阵数学,这基本上是选项1。)

    对于“渲染到纹理”(render to texture)选项,使用a,渲染到该纹理,然后使用a移动/渲染该纹理。请注意,
    Sprite
    实现仅构建在一个简单的四顶点上,可以有效地在屏幕上移动Sprite,因此只有当网格非常复杂且有很多顶点时,此选项才有意义


    嗯。。。现在我已经写出来了,看起来这三个选项都归结为选项1:您应该自己跟踪网格顶点中的实际位置。

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

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

    我试图更改顶点,但有一个问题。我想将箭头校准到用户看到的位置。我是用
    gl.glRotatef(360-(Gdx.input.getazority()),0,0,0.1f)实现的但当我将所有x值加上+0.001f并让它围绕
    0,0.001f,0.1f)旋转时,
    它以大半径旋转,它围绕(0,0,0)旋转
    gl.glRotatef(360-(Gdx.input.getazority()),0,0.001f,0.1f)但我想让它旋转(0,0.001f,0)。当我将z设置为0时,它不再可见。你可以通过提供解释而不仅仅是代码来改进这个答案。天哪!感谢上帝!我到处都在寻找在现代OpenGL中进行网格转换的方法,就在这里!非常感谢。