Quickstart with Advanced Real-Time

The illustration below shows how the advanced real-time module (ART) interacts with HOOPS Luminate:

../../../_images/bk_art_architecture.png

Overview of the ART architecture

We still have the base HOOPS Luminate SDK which is accessible from the HOOPS Luminate block in the diagram above. No changes here. Then, we have three new blocks, all accessible through the RPL namespace of the global HOOPS Luminate API:

  1. The HOOPS Luminate ART engine itself, which is built on top of HOOPS Luminate. ART has its own simple SDK, providing base world definition controls and options. For instance, you’ll find the setup of stars and planets with orbital trajectories so that a sun & sky with atmosphere can be setup and be animated properly.

  2. The geometry part of the ART. This is mostly represented by the RPL::IGeometry interface. This interface is the entry point to the import of user scenes and models into ART. So for instance, architectural models, roads, standalone buildings will all be imported through the RPL::IGeometry interface. The Asset Editor also uses the RPL::IGeometry interface to setup all parameters for import scenes.

  3. The outdoor part of the ART. This is mostly a combination of the asset editor generating pre-defined environments that are loaded through the RED::IAssetManager interface for an immediate display by ART.

Starting up an ART Application

Basic initializations steps in ART are described below:

Initializing the World

HOOPS Luminate advanced real-time API is packaged into the ART namespace. This namespace co-exists with the RED namespace but also delivers its own application logic which operates at a higher level than HOOPS Luminate. We use a world (ART::IWorld) that runs a simulation (ART::IWorld::Start). Then, the world is synchronized (ART::IWorld::Update) and finally shutdown (ART::IWorld::Shutdown).

This is illustrated below:

RED::Object* world = ART::Factory::CreateInstance( CID_ARTWorld );
if( !world )
    RC_TEST( RED_ALLOC_FAILURE );

ART::IWorld* iworld = world->As< ART::IWorld >();

// Setup a simple planetary system:
RC_TEST( iworld->SetupEarthSystem() );

// Start the world:
RC_TEST( iworld->Start( window, NULL, NULL ) );

// Update the world, refresh the app every frame:
while( app_is_running )
{
    RC_TEST( iworld->Update() );
}

// Terminate:
RC_TEST( iworld->Shutdown() );

Then, start with the Loading a Simple Landscape tutorial to start using ART and navigating into it.