Hi all! I’m new here and new to OpenGL, hope this is the right place to post.

I am drawing 2d sprites by using an orthographic projection but I also want to be able to rotate them with perspective-correct texture behavior.

How do I go about positioning and scaling my sprites in 3d space to get them pixel perfect with a perspective projection?

Edit: I seem to have hacked together something that works but I don’t understand how it works:

//Projection

float aspect = ClientRectangle.Width / (float)ClientRectangle.Height;

Matrix4 p = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspect, 0.01f, 10000f);

GL.MatrixMode(MatrixMode.Projection);

GL.LoadMatrix(ref p);

//WorldView

float z = ClientRectangle.Height * 1.208f;

p = Matrix4.Identity;

p *= Matrix4.CreateTranslation(-ClientRectangle.Width / 2f, -ClientRectangle.Height / 2f, 0);

p *= Matrix4.LookAt(new Vector3(0, 0, z), new Vector3(0, 0, -1), Vector3.UnitY);

p *= Matrix4.Scale(1f,-1f,1f);

GL.MatrixMode(MatrixMode.Modelview);

GL.LoadMatrix(ref p);

Can someone explain what the magic number 1.208 means and where it comes from? I calculated it from literaly sticking in random z values until it ‘looked about right’. After two sets of screen height and z values I worked out that number and it’s somehow giving me pixel perfect results.