Many games do just fine with two projections, that can be represented by a matrix (orthographic and linear perspective). But what about projections that can't be represented by a matrix? Can you please provide some examples of such projections and why they might be used in a game application?
closed as too broad by Josh Petrie♦ Jun 21 at 22:17
There are either too many possible answers, or good answers would be too long for this format. Please add details to narrow the answer set or to isolate an issue that can be answered in a few paragraphs.If this question can be reworded to fit the rules in the help center, please edit the question.
Cameras used in graphics applications are most of the time orthographic or mimic a pinhole camera. Both can be represent by a 4*4 matrix. A special variant would be a camera used for 3D rendering where the optical axis is not in the middle of the resulting image (e.g. parallel shift 3D) - but even they can be represented as a 4*4 matrix.
Real camera lenses however can work differently (fisheye lenses) or even tho they are designed to mimic a pinhole, they introduce (unintentionally) a pincushion or barrel distortion. These more exact models are used in computer vision (see for example bundler: http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.3-manual.html ).
If a game wants to mimic real lenses and those effects, it should do so as a post-processing pass in a fragment shader as straight lines should get "bended" and only projecting the vertices correctly (and not the fragments that get generated as rasterization later) will introduce artefacts.
The only example I'm aware of where such a distortion is used in games is the pre-distortion in Oculus Rift games to counter the real-world lens distortion of the HMD. But here it can be handled by the SDK and also is not a property of the games camera so it should not be a property of the camera class.
tl;dr: Unless you plan a photography oriented game with perfectly realistic (fisheye) lenses, you can stick with a 4*4 matrix.