我有一个带有一些多边形(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 回答
我知道这是旧的,但我做的是
(至少)有几种“移动”网格的方法 . 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:你应该自己跟踪网格顶点的实际位置 .