VTS Browser C++: unleash the full power of VTS rendering

By Tomáš Malý
August 12, 2020

The VTS-Browser-CPP is a multiplatform lightweight C++ client library, adding more variability and operability to VTS Geospatial. The VTS-Browser-CPP library has been in development for several years now and is a stable and well-supported part of VTS Geospatial.

The open-source VTS Geospatial technology stack consists of two main building blocks - backend and frontend. The frontend handles 3D visualisation of any geospatial features you might need in your application. You can pick from two rendering libraries: vts-browser-js and vts-browser-cpp. As is foreseeable, the JavaScript library serves as a rendering engine for web-based applications. In contrast, the C++ library is an alternative for those developers who, for some reason, do not want to or cannot use JavaScript in their applications.

C++ library is built on top of OpenGL and benefits from its advantages as compared to WebGL, such as 3D textures, the broader scale of shaders, vertex array objects, and instanced drawing. The library is designed to be used with any other rendering API such as Vulkan, Direct X or Metal.

The library provides high degree of flexibility - almost any aspect can be changed through configuration. You may switch between different loading strategies and navigation modes, change target memory limit, trade network bandwidth for details, etc.

One of the most beautiful things about the library is the realistic physical atmosphere, which you can see on following video. The atmosphere is absolutely authentic, from street level to a view from space. It’s simply mesmerising.

Atmosphere in VTS Geospatial C++ Library

The library runs stable on Windows, Linux, macOS, iOS, and there is also experimental support for UWP and Web Assembly. A significant reception was gained by a plugin that integrates VTS browser capabilities into Unity - one of the two most popular game engines nowadays.

The Unity plugin is available for free at the Unity Asset Store. The plugin includes several basic demo apps. Moreover, to prove the advanced capabilities of the VTS plugin, we created three sample games and published its source codes on GitHub. Those games are VTS Jet Fighter - a game involving flying with an aircraft jet over the landscape, VTSMageddon - a zombie apocalypse game, and VTS Driving - a multiplayer racing car game.

Sample VTS game - VTS Jet Fighert

The library interface is a clean C++, and there are also C and C# bindings available to let developers meet their needs and preferences. The library is usable on less common platforms, such as different onboard devices and embedded systems. To learn more about the vts-browser-cpp library, a good starting point is its GitHub repository, where you can find more detailed information and documentation. At the project’s wiki, there are also links to some sample applications for different platforms, that you may take advantage of to explore library capabilities. A basic desktop application shows off a generic project with a rich UI that features configuration adjustment on the fly, performance statistics, search panel, and a placemark editor. Minimal Browser shows a simple application that renders a map that can be mouse-navigated and aims at introducing the core concepts in vts-browser-cpp development. Its source code is available in all C, C++ and C#. Other sample apps are available at Wasm app, an iOS app for Apple devotees and several more accessible directly from the browser library source directory.

Level of detail rendering in VTS Browser C++ library

Feel free to play around with the provided examples. In case you get stuck, do not hesitate to reach out to us.

Tomáš Malý, Computer Graphics Engineer, VTS & Unity

Tomáš's expertise lies in computer graphics. His responsibility is vts-browser-cpp, the C++ client library forming part of the VTS 3D Geospatial Software stack. The library is cross-platform, and cross-form-factor and its applications include the Unity plugin, currently available in the Unity asset store.