GEO Loader for OpenSceneGraph

This project involved developing a completely new loader for OpenSceneGraph, to load Carbon Graphics GEO files. Before you ask, yes OSG already has a GEO loader but it is a few years out of date and never supported some of the GEO file primitives/concepts. I already have a framework for loading GEO files for my GeoReal application, so it was easier to develop a completely new loader, rather than augment the existing one.

Phase 1: Geometry & Attributes
Phase 1 of the project involved building the base loader, and loading the GEO file for display. Pretty much everything except animation behaviors which will be part of phase 2. This phase has been completed, and the loader supports almost all of the geometry / nodes and attributes expressed in a GEO file. This includes:

  • Polygons, and Meshes
  • Attributes at group, face, and vertex levels
  • Textures, Materials, and Shaders
  • Text (VFN & Raster)
  • Transforms
  • Transparency
  • Instances & Externals
  • Clip Regions
  • LODs, Pages, Switches, etc.
Pretty much everything. There are a couple things that need to be added, but they will be finished during cleanup.

To fully support GEO, it was necessary to add new drawables for the Raster and VFN fonts. The clip regions are supported using a cull callback on a node that has a scissor StateAttribute.

Example of GEO file loaded into OpenSceneGraph.

Phase 2: Animation Behaviors
Phase 2 of the project involves adding animation support. GEO supports quite a few behaviors that can be attributed at various levels in the scene graph. My loader already supports loading these and building the appropriate objects. This task is currently on-going. The following is supported:

  • GEO Internal Vars (frame rate, elapsed time, etc.)
  • External Vars
  • Logic/Arithmetic Behaviors
  • Group Level display behaviors (translate, rotate, scale, DCS.)
  • Text Content Behaviors
  • Color Ramp Behaviors
State Machine behaviors are almost completed, leaving face level transform behaviors as the lone task to complete. After all of the behaviors are running in OSG, I will add the communications mechanisms (UDP, TCP/IP, Shared Memory, and Data File) that the GeoReal components already support.

At this stage the loader has enough functionality to run most GEO files.