Roamer


Project description


One approach to achieving high quality, high resolution terrain with interactive frame rates is to load variable levels of detail.  The ROAMing algorithm provides a geometry-based approach to this problem using triangle bintrees.

Roamer, my project for Intro to Graphics (CSC 471, Spring 2009) is a partial implementation of the ROAMing algorithm. It uses incremental refinement of a continuous mesh to approximate a detailed terrain height map, starting from a base triangle.

The program demonstrates the process of refinement in the split stage of the algorithm.  The user is able to manually increment the creation of new triangles, which are prioritized by the amount of variance of their parent triangle.  In other words, the triangles that provide the worst approximation to the height map will be chosen first for splitting.  A full implementation of ROAM would also include a second priority queue for merging triangles, as well as some performance enhancements such as view frustum culling.

The program shows a view with wireframe sillouhettes f the height map as a mesh with the highest level of detail.  The ROAM approximation is superimposed over the mesh for comparison. It uses only one base triangle, so only half the mesh is approximated.

User guide


Start the program with the path to a terrain height map as the first argument.  The height map is expected to be a (2^N + 1)^2 grid of 16-bit raw binary data.  The program supports loading 16 bit raw files exported from Terragen 0.9 in Intel byte-order.

Controls


Look around by clicking and moving the mouse on the screen.  Fly through the world using WASD keyboard controls.

e:  cycles through mesh display options
k:  turns ROAM rendering on/off
l: turns lighting on/off
j: adds a triangle split to the ROAM bintree
r: resets the camera

Some less frequently used options may be available.  Please consult the source code.

Resources


Roam homepage:  http://www.cognigraph.com/ROAM_homepage/
source code
my email: ntblack at calpoly.edu

Screen Shots






Building the ROAM mesh.




ROAM approximation superimposed on wireframe of base mesh.