Funny you should mention the HUD and Text.
look at the first original image, the HUD and text is stretched/distorted there.
In my "correct" mockup they look normal again (as they have been un-stretched).
Now don't get me wrong, it's not the perspective projection I have an issue with,
but rather the way it's implemented.
As currently a object or character in front of you have a ok size,
but if you turn so they are seen in the corner/side of the screen they not only are stretched but they actually get bigger, in some cases huge depending on the FOV.
This is obviously wrong. try this, put a soda bottle or a glass on your table, then turn your head so you can barely see it in your peripheral/side view.
It still has around the same shape/size just, out of focus. But it is not warped/anamorphed/stretched and 3-4 times bigger.
So what I'm saying is that games should treat the screen as flat, and the aspect ratio as merely the size of the glass/window into the world.
So there are several variables that is needed:
1. Pixel Width and Height aka resolution, this one is obvious I hope.
2. Aspect Ratio, determines the "shape".
3. GUI/HUD positioning, auto-matic or presets or manually adjustable by player, defaults could be stored by the driver or OS and presented to the games.
4. Viewing Distance and DPI, how far you are from the screen so the view area matches a natural window view, auto/semi-automatic calibration and this should also be manually adjustable, defaults could be stored by the driver or OS and presented to the games, DPI is already available via OS API.
5. Stereoscopic, automatic (single screens or auto-calibrated ones) or manual (for custom screen setups)., defaults could be stored by the driver or OS and presented to the games.
6. Curvature, is the screen flat or curved, if curved, then by how many degrees? automatic (single screens or auto-calibrated ones) or manual (for custom screen setups)., defaults could be stored by the driver or OS and presented to the games.
7. View masks, if the screen(s) are non-rectangular, bezel size etc. automatic (single screens or auto-calibrated ones) or manual (for custom screen setups)., defaults could be stored by the driver or OS and presented to the games.
#1 and #2 is easy and available now, but as WSGF'ers know #1 and in particular #2 is still an issue when it really shouldn't be.
#3 and #7 is finally starting to get tackled, as I mentioned AMD exposing an API so games can fetch bezel area is very cool, Nvidia is lagging behind on this currently though.
#4 should not be that hard, as mentioned DPI is already available from the OS via standard APIs but should have been reported by the display instead really, and some monitors have auto light sensors, I'm not saying they should auto sense how far away you sit, just that you should at least be able to set distance in the OS settings somewhere like you do with DPI.
#5 is kinda messy, AMD is on the right track with a open system, but there are at least two competitors providing a solution, Nvidia do the stereoscopic themselves, I believe AMD should have done the same but called it Open3D and made it a sister project to OpenGL instead. MicroSoft is planning something with Windows 8 on the stereoscopic side of things, could this mean that DirectX 12 is in the works with a standardized stereoscopic (shutterglasses and alternating frames at double the framerate would have to be the minimum requirement IMO).
#6 is kinda related to #7 but neither AMD nor Nvidia supports anything related to this, yet...
PS! Many have no idea their DPI is set wrong, I didn't for a long time. Check yours here http://www.emsai.net/projects/widescreen/dpicalc/
Here is another example, we all know that the earth is a sphere. But we also have all seen world maps like this:
THAT is what I want the rendering engines to do.
Now with a normal viewport you would never really see "everything" like that, you'd basically be looking through a virtual windowbox the shape of your screen,
with perspective projection and zoomed in a lot closer to the action as well, the chances of seeing the world repeat itself in the view would be slim.
(Unless you had a curved screen 360 degrees around you that is... But a curved 180 degree screen wouldn't be so bad and might actually almost "fit" on your desk.)
This means that 45x45 degrees (OGRE engine in this case) would be 1:1 aspect ratio. This means that 8:1 screen would be 360degrees, and a 4:1 screen would be 180
I think that around 120+ (135 degrees would in this case be 3:1 screen) starts to reach the limit before you actually need to have a curved display.
And obviously anything wider than 8:1 would have to be pillarboxed to avoid "repeating the world".
A aspect of 1:8 (vertical) on the other hand is less likely, in fact it's very rare to see anything narrower than 1:1, in a few cases like ad boards and PDA's (which you can usually rotate the view of) there might be 1:2 vertical or similar, but I've never seen anything more than that.
Note! I tried messing around with OGRE, and moving camera and setting vFOV and messing with aspect did teach me a lot, it also frustrated me as the binary build I had available do not expose things like the frustum stuff nor let me mess with perspective transform matrixes and so on, maybe I'll peek at the official source and see how the automatic aspect to hFOV is done as OGRE also suffers heavily from the issue seen in the first screenshot here.
Objects far away should not look several times bigger in the corner of your eye and obviously not that stretched either.
Hmm, maybe Reverse Projection could be a possibility as well? *scratches head*