Search code examples
java2dspritecoordinate-systemslibgdx

Changing the Coordinate System in LibGDX (Java)


LibGDX has a coordinate system where (0,0) is at the bottom-left. (like this image: https://i.sstatic.net/jVrJ0.png)

This has me beating my head against a wall, mainly because I'm porting a game I had already made with the usual coordinate system (where 0,0 is in the Top Left Corner).

My question: Is there any simple way of changing this coordinate system?


Solution

  • If you use a Camera (which you should) changing the coordinate system is pretty simple:

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

    If you use TextureRegions and/or a TextureAtlas, all you need to do in addition to that is call region.flip(false, true).

    The reasons we use y-up by default (which you can easily change as illustrated above) are as follows:

    • your simulation code will most likely use a standard euclidian coordinate system with y-up
    • if you go 3D you have y-up
    • The default coordinate system is a right handed one in OpenGL, with y-up. You can of course easily change that with some matrix magic.

    The only two places in libgdx where we use y-down are:

    • Pixmap coordinates (top upper left origin, y-down)
    • Touch event coordinates which are given in window coordinates (top upper left origin, y-down)

    Again, you can easily change the used coordinate system to whatever you want using either Camera or a tiny bit of matrix math.