Skip to content

VR concepts#

Muti-display and cluster rendering can also be useful for VR systems such as CAVEs and Walls.


The goal of a tracking device is to give information to the computer about the position and orientation of a tracked object/human in space.

A VR system typically needs to know where the hand or the head of the user is. A tracking system can also report the position of arbitrary objects, such as a wand or any object whose position is useful for the application.

Coordinate systems#

There is no accepted norm for how the data from a tracking device is reported.

Moving on the Up/Down axis can modify data on the Y or Z axis, positive or negative.

MiddleVR native drivers#

All the devices that are integrated natively in MiddleVR report the following:

  • Positive X axis: moving to the right,
  • Positive Y axis: moving to the front,
  • Positive Z axis: moving up.

MiddleVR coordinate system

Configuring a tracking system#

Please read the section "Configuring a tracking system".


Axis typically store data and events about the axis of a joystick or a mouse, but this could represent any kind of analog information, such as a slider. This information is stored as an array of floats.


Buttons store buttons data. This information is stored as an array of booleans.


The Joystick device is used to store information about joysticks, gamepads, or similar devices. A joystick internally stores its information as both Axis and Buttons types.


In most immersive cubes you interact with the simulation with a standard device called a Wand, or a Flystick.

This device is held in the hand and tracked in space. It commonly has several buttons and a two-axis joystick.

A.R.T. Flystick 2.

A.R.T. Flystick 3.

A Wand can be decomposed in three parts:

  • its 3D position and orientation,
  • the value of the joystick axis,
  • the state of the buttons.

MiddleVR includes standard interactions based on the Wand: navigation, grabbing of objects.

You first have to configure the three parts of the Wand before you can use those interactions.


To create stereoscopy in MiddleVR you will most of the time use a stereoscopic camera, then associate this camera with a viewport. The stereoscopic options are chosen in the viewport parameters.

See also Understanding stereoscopy.

There are several ways to display stereoscopic images in MiddleVR.

Active stereoscopy#

Active stereoscopy (or Frame Sequential) means displaying the left and right images alternatively on the screen. You then need glasses that will hide the left eye when the right picture is visible, then switch: when the left picture is displayed, hide the right eye. Those glasses have electronic shutters to achieve this, which is why they are called active glasses, which also gives the name to active stereoscopy.

The active stereo mode (or Frame-Sequential), requires specific graphics card, typically professional cards such as NVidia Quadro cards or AMD Radeon Pro.

You also have to activate this mode in your graphics drivers. This Knowledge Base article can help you setup your drivers.

Passive stereoscopy#

Passive sterescopy is often achieved by displaying the left and right images side by side or at least displaying the two images at the same time. You then have to put "passive" glasses, which don't have any electronics, which can achieve the separation between the two pictures by means of optical filters, which are often simply polarized filters.

Head-tracking and perspective#

When in front of a screen or projected image, it is often said that this display surface is like a window to the virtual world. Ideally, this display will work exactly the same as a window in the real world.

When the user moves closer to the window, he will see more of the scene. If he moves further from the window, he should see less of the scene.

If he goes to the left, he should, counter-intuitively, see more of the right side of the scene. Conversely, if he goes to the right, he should see more of the left side of the scene.

Symmetric cameras#

With a simple 3D screen, or when watching a 3D movie in a theater, the game/movie always assumes that the user is always perfectly in front of the center of the screen. It does not take into account the potential movements of the viewer. If you move your head, the game/movie doesn’t know about it and nothing will change. You will just get a wrong perspective.

In this case, the virtual camera is said to be "symmetric", because your are as far from the left border of the screen than from the right border. Same goes for top and bottom of the screen.

Asymmetric cameras#

Now, if the computer knows exactly where your eyes are in front of the screen, it can modify the parameters of the virtual camera: the goal is that the computed image looks like the picture you would see through a virtual window of the exact same size as the screen, being at the same relative position in real and virtual world.

In this case, the virtual camera is said to be "asymmetric": your eyes are not in front of the center of the screen anymore, they can be anywhere in space, and the perspective will be computed correctly.

Asymmetric cameras are required to achieve virtually all stereoscopic images in HMDs, 3D screens / Walls and CAVEs.

This is perfectly illustrated in this famous video by Johnny Lee.

Understanding what parameters to configure#

The only factors affecting the perspective are:

  • the screen size: for a 3D TV it is simply the size of the display panel. For a 3D projector, it is the size of the projected rectangular surface.

  • the screen position with respect to the eyes of the user.

Stereoscopy is affected by the same factors plus the inter-eye distance.

Finally, a tracker device can be used to provide head-tracking.

Configuring without head-tracking#

In this configuration, the user is assumed to be at a fixed position from the screen.

There are two ways to configure this kind of VR systems in MiddleVR:

  • using only a stereoscopic camera,

  • using a stereoscopic camera and a screen.

Using only a stereoscopic camera#

In MiddleVR you can simply setup a stereoscopic camera.

The two important parameters here are:

  • Screen Distance: set this parameter to the distance between your user and the screen.
  • Vertical FOV: set this parameter to the apparent vertical field of view of your screen from the user position.

Using a stereoscopic camera and a screen#

The easiest way to configure such a system is to setup a stereoscopic camera linked with a Screen.

There are several template configurations for such systems that you should use as a basis for configuring your own VR system:

  • Wall.vrx
  • HoloStage.vrx

Configuring with head-tracking#

Make sure to read the article: "Understanding head-tracking and perspective".

You should first start by configuring your system with a stereoscopic camera and a screen, as described above.

Finally you should configure your head-tracking device and assign it to a node manipulating the stereoscopic camera.