Hi everyone,
Before I get to my topic: I do not ask anyone to do this, I want to implement this myself, I just ask for help as I don't know much about the engine's capabilities and such.
I also do not care about the usefulness of the idea. I have written a small spaceshooter showing the effects and while it is quite mad, I'm sure one can get used to it.
The load it puts on the graphics card is irrelevant, I assume it won't make much of a difference.
Now
I have always wanted to play a fps while being able to see everything around me. There are many ways to implement a 360 degree view, but outside of raycast renderers or non realtime renderers I have NEVER seen this.
I have looked at several ways to project a whole 3d world on a 2d screen.
Playing around with some math I figured the easiest way would be to dump everything on the graphics card (instead of just everything infront of you) and use a vertex shader to place all triangles "infront" of you so they show up on the viewscreen.
To convert a 3d coordinate of a triangle to a 2d coordinate on the viewscreen the following pseudocode is used:
distance = magnitude(v);
azimuth = atan2(-v.z, v.x); // assuming -z is forward and x is right
inclination = acos(y/distance); // assuming y is up
screen_x = azimuth/(2*pi)*screen_width + screen_width/4;
screen_y = inclination/(2*pi)*screen_height*2;
// screen_x and screen_y need to be wrapped around screen_width and screen_height
// in case of a vertex shader this can be done by assuming screen_width and screen_height to be 1.0 and therefore simply taking the post comma digits would do the job
I'm assuming OA uses vertex shaders for some objects and default vertex shaders for others, I would need to replace all vertex shaders (actually duplicate all and add the changes and make the game choose from some setting which shaders to use).
I'm also assuming OA has some optimizations that prevent stuff behind the player from being drawn, any clue on how to disable that?
Does anyone know of a reason why the whole thing could be impossible?
Does anyone know specific parts of the engine that will make it really hard for me to implement this?
greetings
/ker