3D GUI idea
Posted: Thu Aug 06, 2009 12:07 am
I have a concept for a 3D GUI. Though I would love to have this in my OS, it requires 3D accelleration so at this point in time it seems more suitable as a Windows or Linux shell.
It's a single-tasking shell (so you're only doing on thing at once, though built on top of a multi-tasking system so servers and background programs and the like are still running) and it's targeted at entertainment/gaming machines rather than a workplace/business machine (where WIMP and CLIs are still the most productive interfaces).
My idea is that your operating system's environment in a 3D city. The way it works is that when a program installs, the city allocates it a 'lot', which is basically a 2D patch of ground of a specified shape/area. The shell will find a place to fit this plot, or grow a road out if it can not be fit in.
On this plot of land, there is an API exposed, where the program (not the entire program, more like a low over-head loader that is ran once to cache the geometry of the plot into memory so it can be rendered, the actual program is launched when you enter the plot). This API effectively allows program to construct 3D geometry onto the plot of land. For example, a media player would construct a movie theatre, a go-cart would construct a warehouse that looks like it may hold an indoor go-cart track, a file manager will construct a high-rise office building.
When you walk onto a lot, the loader launches (which should be small and load fast) which can stream a much larger program if it'd like. The exposed API will allow you to interact with the geometry and user (move it with custom physics, show a dialogue for interfacing with NPCs, access input, etc).
There are other things the program can do, for example it can render to a texture in the 3D world (for example, render your movie onto in a cinema, and in the program's code it specifies that if you press a button the camera lines up so the cinema screen is covers your entire monitor so you can enjoy a movie).
You can also have a portal (effectively a wrapper around a texture you render to, with a helper API to make a seamless transition in/out of the portal) and on the other side of the portal the code have full control over exactly how things are rendered. For example, a file manager may look like a large skyscraper that exists as 3D geometry in the city from outside, but when you walk inside you unknowingly went through a portal and the file manger is in direct control of all rendering (so for example, inside there could be 1000s of corridors representing directories that doesn't align to the size of the building outside).
Another example of a portal is you go into a Go-Kart building representing a Go-Kart game. Once inside the warehouse, you're connected to a server so you can see other users walking around (perhaps have some global Avatar) that you can chat to. You could walk to the track when you're ready to race and get into a Go-Kart, then in front of you, the track leads into a dark tunnel with a gate closed. A timer counts down (which is the game loading in the background) and once the track is loaded the tunnel opens and you seamlessly drive out into a large open track (which actually exists in the program and not the city).
Other ideas of lots for representing programs in the city are:
- An E-bay auction house where you can explore listings in 3D, with different floors being different categories.
- A post office for e-mailing.
- A Paypal bank.
- Military barracks for a first person shooter game.
Perhaps a web browser someway. But, I would encourage each website that wants to have their own building that could be downloaded and placed in to the city.
Once the city grows quite large, there will be a above ground train or underground subway for transporting around. As for servers and drivers, I was thinking for them existing underground, each server/driver having a plot of land that you can interact with. For example, to change your network settings you have to go into the core of the city and there will be data cabling infrastructure, and you interact with an NPC - the possibilities are endless. Perhaps the task manager can exist as the form of a police station or city council (to kill any background servers/drivers).
I was also thinking, rather than just having one of each program, for example a file manager or movie player, there would exist several different themes (or anyone can write their own) so a person can personalize their city however they want. You'd also need at least one building representing a package manager in the city so you can install/uninstall other programs.
I was also thinking of extending this idea so you could log on to someone else's computer and interact with their city (though certain rooms in the file manager, as well as underground access to the servers, would be locked).
It's a single-tasking shell (so you're only doing on thing at once, though built on top of a multi-tasking system so servers and background programs and the like are still running) and it's targeted at entertainment/gaming machines rather than a workplace/business machine (where WIMP and CLIs are still the most productive interfaces).
My idea is that your operating system's environment in a 3D city. The way it works is that when a program installs, the city allocates it a 'lot', which is basically a 2D patch of ground of a specified shape/area. The shell will find a place to fit this plot, or grow a road out if it can not be fit in.
On this plot of land, there is an API exposed, where the program (not the entire program, more like a low over-head loader that is ran once to cache the geometry of the plot into memory so it can be rendered, the actual program is launched when you enter the plot). This API effectively allows program to construct 3D geometry onto the plot of land. For example, a media player would construct a movie theatre, a go-cart would construct a warehouse that looks like it may hold an indoor go-cart track, a file manager will construct a high-rise office building.
When you walk onto a lot, the loader launches (which should be small and load fast) which can stream a much larger program if it'd like. The exposed API will allow you to interact with the geometry and user (move it with custom physics, show a dialogue for interfacing with NPCs, access input, etc).
There are other things the program can do, for example it can render to a texture in the 3D world (for example, render your movie onto in a cinema, and in the program's code it specifies that if you press a button the camera lines up so the cinema screen is covers your entire monitor so you can enjoy a movie).
You can also have a portal (effectively a wrapper around a texture you render to, with a helper API to make a seamless transition in/out of the portal) and on the other side of the portal the code have full control over exactly how things are rendered. For example, a file manager may look like a large skyscraper that exists as 3D geometry in the city from outside, but when you walk inside you unknowingly went through a portal and the file manger is in direct control of all rendering (so for example, inside there could be 1000s of corridors representing directories that doesn't align to the size of the building outside).
Another example of a portal is you go into a Go-Kart building representing a Go-Kart game. Once inside the warehouse, you're connected to a server so you can see other users walking around (perhaps have some global Avatar) that you can chat to. You could walk to the track when you're ready to race and get into a Go-Kart, then in front of you, the track leads into a dark tunnel with a gate closed. A timer counts down (which is the game loading in the background) and once the track is loaded the tunnel opens and you seamlessly drive out into a large open track (which actually exists in the program and not the city).
Other ideas of lots for representing programs in the city are:
- An E-bay auction house where you can explore listings in 3D, with different floors being different categories.
- A post office for e-mailing.
- A Paypal bank.
- Military barracks for a first person shooter game.
Perhaps a web browser someway. But, I would encourage each website that wants to have their own building that could be downloaded and placed in to the city.
Once the city grows quite large, there will be a above ground train or underground subway for transporting around. As for servers and drivers, I was thinking for them existing underground, each server/driver having a plot of land that you can interact with. For example, to change your network settings you have to go into the core of the city and there will be data cabling infrastructure, and you interact with an NPC - the possibilities are endless. Perhaps the task manager can exist as the form of a police station or city council (to kill any background servers/drivers).
I was also thinking, rather than just having one of each program, for example a file manager or movie player, there would exist several different themes (or anyone can write their own) so a person can personalize their city however they want. You'd also need at least one building representing a package manager in the city so you can install/uninstall other programs.
I was also thinking of extending this idea so you could log on to someone else's computer and interact with their city (though certain rooms in the file manager, as well as underground access to the servers, would be locked).