在 LibGDX 中更改坐标系 (Java)

2022-08-31 16:31:37

LibGDX有一个坐标系,其中(0,0)位于左下角。(如下图所示:http://i.stack.imgur.com/jVrJ0.png)

这让我把头撞在墙上,主要是因为我正在移植一个我已经用通常的坐标系制作的游戏(其中0,0在左上角)。

我的问题是:有没有简单的方法来改变这个坐标系?


答案 1

如果您使用相机(您应该这样做),则更改坐标系非常简单:

camera= new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

如果您使用 TextureRegions 和/或 TextureAtlas,那么除此之外,您还需要做的就是调用 region.flip(false, true)。

我们默认使用 y-up 的原因(如上图所示,您可以轻松更改)如下:

  • 您的仿真代码很可能会使用标准的欧几里得坐标系,并带有 y-up
  • 如果你去3D,你有y-up
  • 在 OpenGL 中,默认坐标系是右手坐标系,带有 y-up。当然,你可以用一些矩阵魔法轻松改变这一点。

在 libgdx 中,我们使用 y-down 的唯一两个地方是:

  • 像素贴图坐标(左上角原点,y-down)
  • 触摸窗口坐标中给出的事件坐标(左上角原点,y-down)

同样,您可以使用相机或一小部分矩阵数学轻松地将使用的坐标系更改为所需的任何坐标系。


答案 2

只是为了扩展一下上面所说的,如果你使用的是TextureAtlas(带有TextureRegions),除了相机工作之外,你还需要翻转它们,正如badlogic所说。如果您使用的是纹理地图集,则可以在加载地图集后立即使用此代码:

String textureFile = "data/textures.txt";  
atlas = new TextureAtlas(Gdx.files.internal(textureFile), Gdx.files.internal("data"));  
// Let's flip all the regions.  Required for y=0 is TOP
Array<AtlasRegion> tr = atlas.getRegions();      
for (int i = 0; i < tr.size; i++) {
  TextureRegion t = tr.get(i);
  t.flip(false, true);
}

推荐