To give you an idea of what I hope to achieve, here is a list of some things I would like to see in Hypercube, or any other 3D UI.

Window Manager
Handles placing, moving, etc of programs. Note that programs can exist in three dimensions.
  • 3D API for writing 3D applications easily. This would include various 3D widgets, and an easy interface for drawing in 3D
  • Backwards 2D compatibility. It will be impossible to get everyone to port their old applications to native 3D apps, so at least some 2D support is needed. This is especially important early on when there are few native 3D apps. At the moment I have a VNC client rendering to a texture which is applied to a polygon. While it's very slow, it is just barely usable.
User Inteface
This is how the user interacts with the 3D world.
  • Heads-up-display (HUD) similar in concept to many first-person shooters or flight sim games. Various icons, text, etc, are always visible on the screen, overlayed on top of everything else.
  • Various means of moving around; including moving the mouse to the edge of the screen to turn the viewpoint, and clicking on distant objects to move to them (Myst-like movement); and having a separate mode where the cursor disappears and mouse movements control the viewpoint directly, and keys are assigned for moving around (traditional FPS mouse-look and movement).

    This is the area where I think conventional mouse/keyboard input really breaks down. Providing easy, good, movement/interaction in 3D is going to be difficult, especially for those users who don't play any 3D games.

Customization
It must be easily configurable for basic things for normal users, and provide very powerful configuration for power users
  • In-program 3D modelling/texturing/animating. (Yes, I realize I'm crazy to think I can provide even a fraction of the abilities of high-end 3D modelling packages such as Maya or 3D Studio Max, but that's what I'm aiming for).
  • Custom file format, so I can add the features I need how I want. I'm planning to have an XML-based format, so anyone can edit it if they want, and so it is easy to add new features on the fly and still provide backwards compatibility (since unknown tags can be almost transparently ignored).
  • In-program dialogs for customizing many common features, made simple enough for the normal user to easily customize many parts of it.
  • Scripting support, so power users can write scripts for anything, including controlling models, textures, programs, the HUD, etc.
  • As much as possible of the interface in accessible config files so a power user does not have to re-write and re-compile the program to do fairly extreme customization to the interface.
Networking
In addition to the client-server architecture of X, so programs can be run across computers, it should have networking in most aspects of the program.
  • Allow it to serve up a public or private node so people can visit other people's nodes.
  • Avatars for interacting with other people across the network.
  • Make it possible to use across even a modem. Possibly have low-detail versions of models/worlds which can be sent quickly, then more detail, textures, animation, etc, can continue loading in the background while the user is interacting in the world. Hopefully this will be made easier with a carefully constructed XML file format.
3D Engine
The engine will be important to the overall program.
  • Collision detection
  • Realistic physics
  • Powerful animation, from key-frame, to inverse kinematics, to formula-based (i.e., change the radius of the sphere as a function of time, or of processor usage, or size of file, etc)
  • Texturing, transparency
  • Lighting
  • Others, such as particles, curved surfaces, etc would be nice, too
  • All features with as simple an interface as possible, both for creating within the engine, or in the XML file for data