Our framework combines existing libraries with project-specific components to provide an easy implementable environment for applications making use of Leap Motion, Nvidia PhysX, OSG and Fmod.

Framework Architecture UML-diagram

Nvidia PhysX

We use the Nvidia PhysX library and encapsulate most of its functions for easier use. This includes the creation of certain actors (especially boxes and spheres) and joints along with applying forces to these actors. Furthermore, we use functions for detecting and filtering collisions as well as connecting the transformation matrices to the OSG scene.

Open the interface documentation » Visit the homepage »

FMOD

We use the FMOD library and offer functions for saving a sound (with a name) and playing that sound in different modes (only one time or looped).

Open the interface documentation » Visit the homepage »

OSG

We use OSG (OpenSceneGraph) for displaying and organising the scene as well as showing special effects (text, particles etc.). The scenegraph enables us to group nodes for a single transformation (e.g. the Teeter board) and create special nodes such as text or images. This is done with the help of plugins like osgText and osgParticle. We adjust the resulting image with the help of shaders.

Visit the homepage »

Qt

We use Qt for managing the game window and handling user input via mouse and keyboard. It enables us to create the main window and pass the input to game elements such as the menu.

Visit the homepage »

Leap Motion

We use Leap Motion to let the user control the game. This is done by using the hand's rotation for controlling the board in Teeter and the position of the fingers and hand for controlling the virtual hand in Jenga. Furthermore, the movement of two hands can be used to control the camera, and the menu can be controlled using built-in gestures from the Leap Motion SDK.

Visit the homepage »

GameLoop

The Singleton GameLoop provides events for the running application, including the main loop for scene updates and rendering as well as time- and framebased events for registered handlers. Furthermore it supports pausing and unpausing of the simulation.

Open the interface documentation »
GameLoop Architecture UML-diagram

Shader Composition

Shader composition enables us to reuse common shader code that would otherwise simple be copy-pasted; an example is the use of a phong shader function. This works by integrating hotspots like //HOTSPOT_PRE_MAIN into the shader code and injecting text lines via C++. This allows the injection of functions and values from strings or files. Files that are used as shader sources are automatically reloaded and rebuilt on source code changes, which makes live shader programming possible.

Shader composition principle

HUD-System

Our HUD-System allows us to display different kinds of flat content on top of the 3D scene: text, images, scores etc. These objects can be positioned relative to the screen resolution and they can be grouped into ContainerHUDs. MenuHUD is a special container holding a list of selectable options. These can be nested (calling a submenu) or connected to a function to be executed. The menu can be controlled by using hand gestures like drawing a circle in the air or tapping.

HUD system

Camera control

While playing Teeter and Jenga, you might want to change the camera position in order to look at the scene from a different angle. Our custom camera control enables you to rotate, lift or lower the camera by holding two hands above the Leap Motion and perfoming the respective gestures.