The Journey into OpenSceneGraph
A quick overview of rendering middleware
The Birth and development of OSG
Time for action—say "Hello World" OSG style
Compilation and Installation of OpenSceneGraph
Time for action—installing OSG
Time for action—playing with osgviewer
Time for action—creating your solution with one click
Time for action—running CMake in GUI mode
Generating packages using Visual Studio
Time for action—building with a Visual Studio solution
Time for action—building with a UNIX makefile
Configuring environment variables
Creating Your First OSG Program
Constructing your own projects
Time for action—building applications with CMake
Time for action—improving the "Hello World" example
Understanding memory management
ref_ptr<> and Referenced classes
Collecting garbage: why and how
Time for action—monitoring counted objects
Parsing command-line arguments
Time for action—reading the model filename from the command line
Time for action—saving the log file
Time for action—quickly creating simple objects
Vertices and vertex attributes
Time for action—drawing a colored quad
Time for action—drawing an octahedron
Time for action—tessellating a polygon
Customizing a primitive functor
Time for action—collecting triangle faces
Implementing your own drawables
Time for action—creating the famous OpenGL teapot
Time for action—adding models to the scene graph
Time for action—performing translations of child nodes
Time for action—switching between the normal and damaged Cessna
Time for action—constructing a LOD Cessna
Time for action—loading a model at runtime
Time for action—animating the switch node
Visiting scene graph structures
Time for action—analyzing the Cessna structure
Creating Realistic Rendering Effects
Encapsulating the OpenGL state machine
Time for action—setting polygon modes of different nodes
Time for action—lighting the glider or not
Playing with fixed-function effects
Time for action—applying simple fog to models
Time for action—creating light sources in the scene
Time for action—loading and applying 2D textures
Time for action—achieving the translucent effect
Understanding graphics shaders
Time for action—implementing a cartoon cow
Working with the geometry shader
Time for action—generating a Bezier curve
Time for action—creating an HUD camera
Digging into the simulation loop
Time for action—customizing the simulation loop
Time for action—rendering more scenes at one time
Changing global display settings
Time for action—enabling global multisampling
Time for action—rendering anaglyph stereo scenes
Frame buffer, pixel buffer, and FBO
Time for action—drawing aircrafts on a loaded terrain
Taking references to functions
Time for action—switching nodes in the update traversal
Avoiding conflicting modifications
Time for action—drawing a geometry dynamically
Animating the transformation nodes
Time for action—making use of the animation path
Time for action—rendering a flashing spotlight
Creating complex key-frame animations
Channels and animation managers
Time for action—managing animation channels
Loading and rendering characters
Time for action—creating and driving a character system
Interacting with Outside Elements
Handling mouse and keyboard inputs
Time for action—driving the Cessna
Time for action—creating a user timer
Time for action—clicking and selecting geometries
Windows, graphics contexts, and cameras
Time for action—configuring the traits of a rendering window
Time for action—attaching OSG with a window handle in Win32
Understanding file I/O plugins
Discovery of specified extension
Time for action—reading files from the Internet
Configuring third-party dependencies
Time for action—adding libcurl support for OSG
Time for action—designing and parsing a new file format
Time for action—creating serializers for user-defined classes
Creating billboards in a scene
Time for action—creating banners facing you
Time for action—writing descriptions for the Cessna
Time for action—creating texts in the world space
Time for action—building a fountain in the scene
Creating shadows on the ground
Time for action—receiving and casting shadows
Time for action—drawing the outline of models
Improving Rendering Efficiency
Time for action—using a separate data receiver thread
Understanding multithreaded rendering
Time for action—switching between different threading models
Time for action—adding occluders to a complex scene
Time for action—sharing textures with a customized callback