Screens have traditionally been oriented vertically to face the user. However, an increasing number of screens are available in horizontal ("table-top") form factors. When desiging a 3D user interface, one of the first tasks is to define the coordinate space (i.e. which direction is "up", "right", and "forward"?).
If we pick a coordinate space that corresponds to the real world, then for vertical screen "up" and "right" are along the screen edges, and "forward" (in a right-hand coordinate system) is out of the screen toward the viewer. A representation of a horizontal surface in the real-world disappears "into" the screen, as shown below in Figure 1.
Figure 1. User interface for vertical screen with horizontal plane "into" the screen.
In contrast, for a horizontal screen "up" is out of the screen and "right" and "forward" are along the edges. A representation of a horizontal surface in the real-world is in the same plane as the screen, as shown below in Figure 2.
Figure 2. User interface for horizontal screen with horizontal plane "on" the screen.
In this way, a particular screen orientation therefore lends itself more naturally to certain experiences. For example, a vertical screen behaves as a "virtual window" onto the world such as in a first-person 3D game. A horizontal screen on the other hand, behaves as a "virtual table" for viewing and manipulating objects, or as a view from a third-person game looking "down" onto the world.
This project aims to build an orientation-independant user interface for a holographic display, which would naturally lend itself to the type of display being used. Many apps now support both landscape and portrait modes. I wanted support both horizontal and vertical modes, and since I specify orientation using vectors I can also specify any intermediate angle.