3D Landscape Visualization

Project was done for a private company developing its own brand new GPS navigation software helping travelling people in finding their way from certain locations to the desired destinations and showing map to further help understand the current location and what awaits travelers on their way to the destination. Displaying map with various zoom levels, calculating optimal routes, providing comprehensive visual and voice guidance along the way and localization to native user languages all make the application a great assistant during travels. However the solution had one serious disadvantage: map and all objects on it such as buildings, points of interest and other landmarks were drawn in 2D meaning traveler could have problems identifying surroundings while traveling. One of obvious reasons for such limitation was tied to limited performance of mobile hardware devices used by drivers for navigation assistance. With introduction of new generations of mobile devices with overall enhanced performance and specifically built-in 3D acceleration to market it became possible to fully utilize new performance and 3D rendering capabilities to draw models of buildings and other objects with quality almost close to photographic. Furthermore, map providers supply maps with models of buildings accurate enough to be recognizable. This was the task for the team: render 3D models of buildings and other map objects at runtime to make map more recognizable by travelers and giving them even better idea where they are at the moment and what they should see next to ensure they are precisely following their routes.

The GPS navigation application supports the following operating systems:

  • Windows XP embedded and higher;
  • Windows Mobile 5 and higher.

Solution

The proposed solution consists of several logically separate modules and even several separate applications providing comprehensive means for demonstration and usage of the new 3D rendering capabilities, generation of maps recognized by 3D rendering engine and bundling 3D rendering engine to the pre-existing application which provides a set of usable features to drives.

The supplied application can work in 2 modes:

  • as an independent application drawing 3D objects only (for enhanced performance);
  • 3D rendering incorporated to 2D rendering application (providing route generation, guidance along the way and other pre-existing functionality).

The supplied 3D rendering engine can work in 2 modes:

  • drawing buildings as solid models without textures;
  • drawing textured buildings.

Supported rendering libraries are:

  • OpenGL;
  • Direct3D.

Supported operating systems are:

  • Windows XP embedded and higher (requires DirectX 9.0 or higher);
  • Windows Mobile 5 and higher.

The ultimate task was split by the team into four major sub-tasks that had to be done to achieve the ultimate goal:

  • Convert the supplied maps to a compact binary format with minimal excessive information;
  • Implement 3D rendering engine which would build 3D scene according to map;
  • Integrate 3D rendering engine to the existing application;
  • Perform overall application optimization performance wise and minimize memory usage (new mobile devices have enhanced performance, however they are still not even close to what we see on desktop hardware resulting in obvious fact: any serious application for mobile devices should be polished performance wise and resource utilization should be minimal).

Each of the tasks was implemented separately and was represented by logically independent module. During performance optimization acceptable level of CPU frequency, Video card performance and RAM size required to run and comfortably use the application was achieved.

Architecture

The solution consists of several logical modules:

VRML Parser / Map convertor is a separate application written in Java which uses standard libraries to parse VRML maps from map providers and convert them into compact binary format with minimum excessive data and without overhead of VRML text format.

Map loader / Resource manager is middle tier between binary map and 3D rendering engine. It is responsible for loading necessary 3D object data and textures from binary map files, smart caching information of objects which are still in use and unloading data which is not needed for map rendering (in order to control memory usage).

3D rendering core is cross platform OpenGL rendering engine capable of rendering 3D scenes on all operating systems which support OpenGL. Its separate implementation contains Direct3D rendering engine capable of running on all versions of Windows (desktop/mobile) which include DirectX 9.0 or higher.

3D renderer wrappers are developed for each separate combination of platform and rendering mode to make rendering core operate on specific versions of operating systems. Examples are: DirectX for Windows XP wrapper; OpenGL for Windows Mobile wrapper.

Integration to core application module provides middle layer between pre-existing application and independent 3D rendering module.

Tools and Technologies

  • Windows XP / Windows Mobile 5
  • OpenGL / DirectX 9.0
  • Microsoft Visual Studio 6, 2005
  • C++ programming language
  • Assembler for performance optimizations
  • J2SE, Eclipse
  • Java 3D 1.5.1 (Sun); Xj3D (Web3D Consortium)

Benefits

Cost-effective outsource team with significant experience in 3D rendering with the most popular libraries such as OpenGL and DirectX managed to complete the project before the expected date which left time for optimization and polishing the solution. Experience with development of 3D applications combined with comprehensive management helped to react fast on changing preferences/requirements/priorities. Team result orientation, self-motivation and understanding of the ultimate goal helped organize project implementation with minimal guidance from the customer. The proposed solution is designed as a set of independent components which simplifies modification of certain functionality without reworking the entire application. Cross-platform 3D rendering engines simplify porting the entire project to any platform with OpenGL / DirectX support. Porting requires as much as implementation of light-weight wrapper only.