Cover
Copyright
Credits
Foreword
About the Authors
About the Reviewers
Table of Contents
Preface
Chapter 1: The Journey into OpenSceneGraph
A quick overview of rendering middleware
Scene graphs
The Birth and development of OSG
Components
Why OSG?
Who uses OSG?
Have a quick taste
Time for action – say "Hello World" OSG style
Live in community
Summary
Chapter 2: Compilation and Installation of OpenSceneGraph
System requirements
Using the installer
Time for action – installing OSG
Running utilities
Time for action – playing with osgviewer
Using the project wizard
Time for action – creating your solution with one click
Prebuilts making trouble?
Cross-platform building
Starting CMake
Time for action – running CMake in GUI mode
Setting up options
Generating packages using Visual Studio
Time for action – building with a Visual Studio solution
Generating packages using gcc
Time for action – building with a UNIX makefile
Configuring environment variables
Summary
Chapter 3: Creating Your First OSG Program
Constructing your own projects
Time for action – building applications with CMake
Using a root node
Time for action – improving the "Hello World" example
Understanding memory management
ref_ptr<> and Referenced classes
Collecting garbage: why and how
Tracing the managed entities
Time for action – monitoring counted objects
Parsing command-line arguments
Time for action – reading the model filename from the
command line
Tracing with the notifier
Redirecting the notifier
Time for action – saving the log file
Summary
Chapter 4: Building Geometry Models
How OpenGL draws objects
Geode and Drawable classes
Rendering basic shapes
Time for action – quickly creating simple objects
Storing array data
Vertices and vertex attributes
Specifying drawing types
Time for action – drawing a colored quad
Indexing primitives
Time for action – drawing an octahedron
Using polygonal techniques
Time for action – tessellating a polygon
Rereading geometry attributes
Customizing a primitive functor
Time for action – collecting triangle faces
Implementing your own drawables
Using OpenGL drawing calls
Time for action – creating the famous OpenGL teapot
Summary
Chapter 5: Managing Scene Graph
The Group interface
Managing parent nodes
Time for action – adding models to the scene graph
Traversing the scene graph
Transformation nodes
Understanding the matrix
The MatrixTransform class
Time for action – performing translations of child nodes
Switch nodes
Time for action – switching between the normal and
damaged Cessna
Level-of-detail nodes
Time for action – constructing a LOD Cessna
Proxy and paging nodes
Time for action – loading a model at runtime
Customizing your own NodeKits
Time for action – animating the switch node
The visitor design pattern
Visiting scene graph structures
Time for action – analyzing the Cessna structure
Summary
Chapter 6: Creating Realistic Rendering Effects
Encapsulating the OpenGL state machine
Attributes and modes
Time for action – setting polygon modes of different nodes
Inheriting render states
Time for action – lighting the glider or not
Playing with fixed-function effects
Time for action – applying simple fog to models
Lights and light sources
Time for action – creating light sources in the scene
The Image class
The basis of texture mapping
Time for action – loading and applying 2D textures
Handling rendering order
Time for action – achieving the translucent effect
Understanding graphics shaders
Using uniforms
Time for action – implementing a cartoon cow
Working with the geometry shader
Time for action – generating a Bezier curve
Summary
Chapter 7: Viewing the World
From world to screen
The Camera class
Rendering order of cameras
Time for action – creating an HUD camera
Using a single viewer
Digging into the simulation loop
Time for action – customizing the simulation loop
Using a composite viewer
Time for action – rendering more scenes at one time
Changing global display settings
Time for action – enabling global multisampling
Stereo visualization
Time for action – rendering anaglyph stereo scenes
Rendering to textures
Frame buffer, pixel buffer, and FBO
Time for action – drawing aircrafts on a loaded terrain
Summary
Chapter 8: Animating Scene Objects
Taking references to functions
List of callbacks
Time for action – switching nodes in the update traversal
Avoiding conflicting modifications
Time for action – drawing a geometry dynamically
Understanding ease motions
Animating the transformation nodes
Time for action – making use of the animation path
Changing rendering states
Time for action – fading in
Playing movies on textures
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
Summary
Chapter 9: Interacting with
Outside Elements
Various events
Handling mouse and keyboard inputs
Time for action – driving the Cessna
Adding customized events
Time for action – creating a user timer
Picking objects
Intersection
Time for action – clicking and selecting geometries
Windows, graphics contexts, and cameras
The Traits class
Time for action – configuring the traits of a rendering window
Integrating OSG into a window
Time for action – attaching OSG with a window handle in Win32
Summary
Chapter 10: Saving and Loading Files
Understanding file I/O plugins
Discovery of specified extension
Supported file formats
The pseudo-loader
Time for action – reading files from the Internet
Configuring third-party dependencies
Time for action – adding libcurl support for OSG
Writing your own plugins
Handling the data stream
Time for action – designing and parsing a new file format
Serializing OSG native scenes
Creating serializers
Time for action – creating serializers for user-defined classes
Summary
Chapter 11: Developing Visual Components
Creating billboards in a scene
Time for action – creating banners facing you
Creating texts
Time for action – writing descriptions for the Cessna
Creating 3D texts
Time for action – creating texts in the world space
Creating particle animations
Time for action – building a fountain in the scene
Creating shadows on the ground
Time for action – receiving and casting shadows
Implementing special effects
Time for action – drawing the outline of models
Playing with more NodeKits
Summary
Chapter 12: Improving Rendering Efficiency
OpenThreads basics
Time for action – using a separate data receiver thread
Understanding multithreaded rendering
Time for action – switching between different threading models
Dynamic scene culling
Occluders and occludees
Time for action – adding occluders to a complex scene
Improving your application
Time for action – sharing textures with a customized callback
Paging huge scene data
Making use of the quad-tree
Time for action – building a quad-tree for massive rendering
Summary
Appendix: Pop Quiz Answers
Chapter 2
Dependencies of osgviewer
The difference between ALL_BUILD and 'build all'
Chapter 3
Configuring OSG path options yourselves
Release a smart pointer
Chapter 4
Results of different primitive types
Optimizing indexed geometries
Chapter 5
Fast dynamic casting
Matrix multiplications
Chapter 6
Lights without sources
Replacements of built-in uniforms
Chapter 7
Changing model positions in the HUD camera
Another way to display the same scene in different views
Chapter 8
Adding or setting callbacks
Choosing the alpha setter and the callback
Chapter 9
Handling events within nodes
Global and node-related events
Chapter 10
Getting rid of pseudo-loaders
Understanding the inheritance relations
Chapter 11
Text positions and the projection matrix
Chapter 12
Carefully blocking threads
Number of created levels and files
Index