Search code examples
c#mathopenglopentkfrustum

Get the bounds of the plane visible at a specific z coordinate


Using OpenTK, I've created a window (800x600) with a vertical FOV of 90°. I want to make a 2D game with a background image that fits on the whole screen. What I want is the plane at a variable z coordinate as a RectangleF.

Currently my code is:

var y = (float)(Math.Tan(Math.PI / 4) * z);
return new RectangleF(aspectRatio * -y, -y, 2 * aspectRatio * y, 2 * y);

The rectangle calculated by this is always a little to small, this effect seems to decrease with z increasing. Hoping someone will find my mistake.


Solution

  • I want to make a 2D game with a background image that fits on the whole screen.

    Then don't bother with perspective calculations. Just switch to an orthographic projection for drawing the background, disabling depth writes. Then switch to a perspective projection for the rest.

    OpenGL is not a scene graph, it's a statefull drawing API. Make use of that fact.