Advertisement Jump to content
Sign in to follow this  
Martin Perry

2D game and projection

This topic is 1648 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am doing 2D platformer game with single screen. For now, I am using classic ortho projection mapped to box with [0,0] - [w, h] of the screen and cetered to put world coordinates point (0,0) to bottom left corner of my screen.


Now I have problem witch changing resolution, my game looks different on every one if I calculate world coordinates to match pixels. So obviously not a way to go.


What is a correct way? I want to have constant world coordinates on every device and always put everything onto the screen (considering same AR.. for different AR I just will see more sky, but I need to have constant width).

Share this post

Link to post
Share on other sites

In pseudo code, I do something like this:

widthratio = screenwidth / levelwidth

First, my screen resolution is divided against the native width of my level.  This gives me the ratio I need to either shrink or stretch the level and make it fit within the width of the screen.  Next, I call a method I created which handles the resizing.  This method is also responsible for figuring out the correct thing to do with the height, and it also shrinks everything on the screen according to the widthratio.  That's a simplification of how I handle it.  Don't know if it will work for you, but thought I'd share how I approached the same type of problem.

Share this post

Link to post
Share on other sites

Your othro projection width will be fixed to your world size. To handle the aspect ratio difference, you just need to calculate the height of your projection.


you want the screen aspect ratio to match the world aspect ratio

worldWidth/worldHeight = screenWidth/screenHeight


solve for worldHeight

worldHeight = screenHeight * worldWidth / screenWidth

Share this post

Link to post
Share on other sites

For now, I am using this projection matrix (LH)

zFar = 1

zNear = -1

width = screen width

height = screen height

m.M[0][0] = 2.0f / width;
m.M[1][1] = 2.0f / height;
m.M[2][2] = -2.0f / (zFar - zNear);
m.M[3][2] = (zFar + zNear)  / (zFar - zNear); //for RH -1*
m.M[3][3] = 1;

So... I should change height to "screenHeight * worldWidth / screenWidth" ?

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!