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.
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.
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.