The Journey into OpenSceneGraph
[
]
A quick overview of rendering middleware
Before entering the world of OpenSceneGraph, we assume that you are already experienced 
in OpenGL programming. You work with stacks of matrices, set pipeline states, look for new 
extensions, call rendering APIs or commands and immediately draw them on a context, no 
ma瑴er if you are enjoying or suffering from the whole process.
A rendering middleware is a solu瑩on that raises the level of abstrac瑩on and eases the 
complexity of using a low-level OpenGL API, at the cost of flexibility. The concepts of 
modularity and object-orienta瑩on are o晴en applied to manage graphics primi瑩ves, 
materials, and different visual data sets in user applica瑩ons, saving much development  
瑩me and allowing new func瑩onali瑩es to be combined as modules and plugins.
OpenSceneGraph is a well-designed rendering middleware applica瑩on. It is actually a 
retained rendering (or deferred rendering) system based on the theory of scene graph
which records rendering commands and data in a buffer, for execu瑩ng at some other 
瑩me. This allows the system to perform various op瑩miza瑩ons before rendering, as well as 
implement a mul瑩threaded strategy for handling complex scenes.
Scene graphs
scene graph is a general data structure that defines the spa瑩al and logical rela瑩onship 
of a graphical scene for efficient management and rendering of graphics data. It is typically 
represented as a hierarchical graph, which contains a collec瑩on of graphics nodes including 
a top-level root node, a number of group nodes each of which can have any number of child 
nodes, and a set of leaf nodes each of which has zero child nodes and that serve together 
as the bo瑴om layer of the tree. A typical scene graph does not allow a directed cycle (where 
some nodes are connected in a closed chain) or an isolated element (a node that has no 
child or parent) inside of itself.
Each group node can have any number of children. Grouping these child nodes allows them 
to share the informa瑩on of the parent and be treated as one unit. By default, an opera瑩on 
performed by a parent propagates its effects to all of its children.
It also happens that certain nodes have more than one parent node, in which case the 
node is considered to be "instanced", and the scene graph can be defined as a directed 
acyclic graph (DAG). Instancing produces many interes瑩ng effects, including data sharing 
and mul瑩-pass rendering.
The concept of scene graph has been widely applied in many modern so晴ware and 
applica瑩ons, for instance, AutoCAD, Maya, CorelDraw, VRML, Open Inventor, and the 
one that we are going to inves瑩gate—OpenSceneGraph.
Break pdf password - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
break password pdf; cannot print pdf no pages selected
Break pdf password - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
break a pdf into smaller files; add page break to pdf
Chapter 1
[
]
The Birth and development of OSG
The OpenSceneGraph project was ini瑩ated as an avoca瑩on by Don Burns in 1998. He used to 
work for SGI and is a hang-gliding enthusiast. He wrote a simplified SGI Performer-like scene 
graph API on a humble Linux PC, named SG, which was the prototype of OSG.
In 1999, Robert Osfield, a design consultant for a hang-glider manufacturer, started to take 
part in this young project. He suggested con瑩nuity to develop SG as a standalone, open 
source project and soon ported its elements to Windows. At the end of the year, Robert 
took over the project and changed its name to OpenSceneGraph. The project was then fully 
rewri瑴en to take advantage of C++ standards and design pa瑴erns.
In 2001, in response to the growing interest in the project, Robert set up OpenSceneGraph 
Professional Services. He gave up the opportunity to work for other companies, and went 
full-瑩me providing both commercial and free OSG services. Don also formed his own 
company, Andes Computer Engineering, and con瑩nues to support the development of OSG.
The first OpenSceneGraph birds-of-a-feather (BOF) mee瑩ng occurred the same year, at 
SIGGRAPH 2001, with only 12 people a瑴ending. A晴er that, a瑴endance at the OSG BOF 
con瑩nues to grow every year, with more and more people ge瑴ng to know this great 
OpenGL-based API.
The Producer library, which was ini瑩ally created to provide windowing and mul瑩-pipe 
graphic system integra瑩ons for customer's needs, was added, along with other two 
important libraries, osgText and osgFX, in 2003. Then, in 2005, OSG 1.0 was announced, 
to the delight of over 1,100 members in the mailing list.
In 2007, a totally new OSG 2.0 was released, with improved mul瑩-core, mul瑩-GPU support, 
and three important new libraries: osgViewerosgManipulator, and osgShadow. From 
then on, the unified build system CMake was used to simplify the build process. Then 
the old Producer was deprecated and maintained by Andes Computer Engineering as an 
independent project. The first two OSG books, OpenSceneGraph Quick Start Guide and 
OpenSceneGraph Reference Manuals, were available, too. Paul Martz dedicated them to all 
developers who were new to scene graph technology.
How 瑩me flies! Years have slipped away and OSG is developing at an incredible speed all the 
瑩me: osgWidget was first introduced in 2008; osgVolume and osgAnima瑩on came out in 
2009; and osgQt was born in 2010, with the coming 3.0 release and the amazing OpenGL ES 
and OpenGL 3.0 support.
Today, several hundred high-performance applica瑩ons are using OSG to render complex 
scenes and manage massive datasets. With the great efforts made by 432 core contributors 
and the con瑩nuous support of so晴ware developers around the world, it can be an瑩cipated 
that OSG has a very bright future ahead of it.
C# PDF Convert: How to Convert Jpeg, Png, Bmp, & Gif Raster Images
Success"); break; case ConvertResult.FILE_TYPE_UNSUPPORT: Console.WriteLine("Fail: can not convert to PDF, file type unsupport"); break; case ConvertResult
reader split pdf; break pdf into separate pages
C# Image Convert: How to Convert Word to Jpeg, Png, Bmp, and Gif
RasterEdge.XDoc.PDF.dll. FileType.IMG_JPEG); switch (result) { case ConvertResult. NO_ERROR: Console.WriteLine("Success"); break; case ConvertResult
break pdf password; pdf splitter
The Journey into OpenSceneGraph
[
10 
]
Components
The compu瑩ng infrastructure of OSG is designed to be highly scalable in order to enable 
run瑩me access to extended func瑩onali瑩es. In addi瑩on to the standard core libraries, a set 
of addi瑩onal modular libraries known as NodeKits have been delivered to meet specific 
development requirements.
The core OSG func瑩onality consists of four libraries:
1. The OpenThreads library: This library is intended to provide a minimal and complete 
Object-Oriented (OO) thread interface for C++ programmers. It is used by OSG as the 
main threading model implementa瑩on.
2. The osg library: This library provides basic elements used to build scene graphs, 
such as nodes, geometries, rendering states and textures, as well as related 
management tools and methods. It also contains a few necessary math classes, 
which are used to implement vector and matrix opera瑩ons that are commonly  
used in two-dimensional and three-dimensional spaces.
3. The osgDB library: This library provides a plugin mechanism for reading and wri瑩ng 
2D and 3D files, with a derivable class containing access to data files and stream I/O 
opera瑩ons. Its built-in database pager also supports dynamic loading and unloading 
of scene graph segments, in order to achieve the scheduling of huge collec瑩ons of 
user data.
4. The osgU瑩l library: This library is designed for building the OSG rendering backend, 
which traverses the scene tree, performs culling in each frame, and finally converts 
the OSG scene into a series of OpenGL calls. There are also func瑩onali瑩es for user 
intersec瑩ons, and polygon modifica瑩on algorithms.
The extra NodeKits and u瑩li瑩es available with current OSG distribu瑩ons are:
‹
The osgAnima瑩on library: This library provides a range of general purpose u瑩li瑩es 
for various anima瑩ons, including skeleton and morphing. It uses generic templates  
to construct mul瑩ple kinds of key frames and anima瑩on channels.
‹
The osgFX library: This library has a framework for implemen瑩ng special effects in 
the 3D space, and contains several useful effect classes.
‹
The osgGA library, which stands for OSG GUI abstrac瑩on: This library is an abstract 
user interface on top of various windowing systems. It helps to handle interac瑩ve 
events from peripheral devices, for example, a keyboard or mouse.
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Forms. Support adding PDF page number. Offer PDF page break inserting function. Free SDK library for Visual Studio .NET. Independent
how to split pdf file by pages; break apart a pdf file
C# PDF Page Insert Library: insert pages into PDF file in C#.net
Ability to add PDF page number in preview. Offer PDF page break inserting function. Free components and online source codes for .NET framework 2.0+.
pdf print error no pages selected; cannot select text in pdf file
Chapter 1
[
11 
]
‹
The osgManipulator library: This library extends the scene graph to support 3D 
interac瑩ve manipula瑩on, such as moving, rota瑩ng, and scaling of transformable 
nodes.
‹
The osgPar瑩cle library: This library makes it possible to render explosions, fire, 
smoke, and other par瑩cle-based effects.
‹
The osgShadow library: This library provides a framework for various shadow 
rendering techniques.
‹
The osgSim library: This library meets some special requirements from simula瑩on 
systems, especially from the OpenFlight databases.
‹
The osgTerrain library: This library provides geographic terrain rendering support 
using height field and imagery data.
‹
The osgText library: This library fully supports the rendering of TypeType and a 
series of other font formats, based on the FreeType project. It can draw 2D and 3D 
texts in 3D space or on the screen.
‹
The osgViewer library: This library defines a set of viewer-related classes, and 
therefore integrates OSG scene graphs and renders the backend with a wide  
variety of windowing systems, including Win32, X11, Carbon, and Cocoa, as well  
as providing indirect support for many other famous GUI toolkits.
‹
The osgVolume library: This library includes an ini瑩al support for volume rendering 
techniques.
‹
The osgWidget library: This library extends the core OSG elements and provides a 
2D GUI widget set for 3D applica瑩ons.
‹
The osgQt library: This library embeds the Qt GUI into scene graphs and thus has 
the ability to display web pages and common Qt widgets in space.
All OSG core libraries and NodeKits, no ma瑴er what kind of features they implement or 
who contributed them, have the same prefix "osg", and a short word or abbrevia瑩on 
followed as the keyword.
C# TWAIN - Query & Set Device Abilities in C#
device.TwainTransferMode = method; break; } if (method == TwainTransferMethod.TWSX_FILE) device.TransferMethod = method; } // If it's not supported tell stop.
acrobat separate pdf pages; break password on pdf
C# TWAIN - Install, Deploy and Distribute XImage.Twain Control
RasterEdge.XDoc.PDF.dll. device.TwainTransferMode = method; break; } if (method == TwainTransferMethod.TWSX_FILE) device.TransferMethod = method; } // If it's
reader split pdf; pdf no pages selected to print
The Journey into OpenSceneGraph
[
12 
]
The whole OSG architecture can be illustrated as follows:
In most cases, the osgosgDB, osgU瑩l, and osgViewer libraries are the major components 
of an OSG-based applica瑩on, and will be discussed in more detail in the following  
chapters of this book, while other less frequently used NodeKits may also be men瑩oned in 
specific chapters.
Why OSG?
The OSG project is open sourced and released under a modified GNU Lesser General Public 
License (LGPL), named OSGPL. It brings about significant benefits to its users:
‹
Rigorous structure: OSG makes full use of the Standard Template Library (STL) 
and mul瑩ple design pa瑴erns. It also takes advantage of the open source 
development model in order to provide a legacy-free and user-centric applica瑩on 
programming interface.
‹
Superior performance: A series of scene graph techniques are already 
well-implemented in OSG, including view-frustum and occlusion culling, level of 
detail (LOD) configura瑩on, rendering state sor瑩ng, par瑩cle and shadow supports, 
and complete encapsula瑩on of OpenGL extensions and the shader language.
‹
High scalability: The core OSG func瑩onali瑩es are clean and highly extensible. 
This makes it easy for users to write their own NodeKits and file I/O plugins,  
and integrate them into scene graphs and applica瑩ons.
C# TWAIN - Specify Size and Location to Scan
foreach (TwainStaticFrameSizeType frame in frames) { if (frame == TwainStaticFrameSizeType.LetterUS) { this.device.FrameSize = frame; break; } } }.
split pdf files; break a pdf password
C# TWAIN - Acquire or Save Image to File
RasterEdge.XDoc.PDF.dll. if (device.Compression != TwainCompressionMode.Group4) device.Compression = TwainCompressionMode.Group3; break; } } acq.FileTranfer
break apart a pdf in reader; break apart pdf pages
Chapter 1
[
13 
]
‹
So晴ware and hardware portability: The core OSG is already designed to have 
minimal dependency on any specific pla瑦orm or windowing system, requiring only 
Standard C++ and OpenGL. This provides great convenience in being able to rapidly 
port OSG-based applica瑩ons to Windows, Linux, Mac OSX, FreeBSD, Solaris, and 
even embedded pla瑦orms.
‹
Latest ac瑩vity: With an ac瑩ve developer community, OSG is growing at an 
incredible speed. It supports the latest OpenGL and OpenGL ES extensions and 
various graphics concepts and techniques, along with a great deal of feedback in  
the development cycle.
‹
Open source: In modern industry, open source means co-intelligence, quality and 
flexibility, rather than merely inexpensive. Users and companies also don't have to 
worry about so晴ware patent viola瑩ons when using OSG in their own applica瑩ons.
Who uses OSG?
The following is a rough list of some of the organiza瑩ons that are using or have used OSG as 
a development tool for their applica瑩ons and products:
Organiza瑩on name
Download link (if downloadable)
Purpose using OSG
Boeing
-
Flight simula瑩on
Delta 3D
w
w
w
.
d
e
l
t
a
3
d
.
o
r
g
Game engine
Flight Gear
w
w
w
.
f
l
i
g
h
t
g
e
a
r
.
o
r
g
Flight simula瑩on
Intra
-
Train simula瑩on
Magic Earth
-
Oil and gas probing
NASA
-
Earth simula瑩on
Norcontrol
-
Mari瑩me simula瑩on
ossimPlanet
o
s
s
i
m
P
l
a
n
e
t
.
h
t
m
l
Geo-spa瑩al visualiza瑩on
Virtual Terrain Project
w
w
w
.
v
t
e
r
r
a
i
n
.
o
r
g
CAD and GIS related fields
VR Juggler
w
w
w
.
v
r
j
u
g
g
l
e
r
.
o
r
g
Virtual reality system
Other customers include ESA, Landmark Graphics, Sony, STN Atlas, Northrop Grumman, and 
even the military sectors. To learn more about the large number of OSG-based projects and 
outcome, just search the whole web, and always keep in contact with developers all over the 
world through the web community.
The Journey into OpenSceneGraph
[
14 
]
Have a quick taste
Before si瑴ng down and coding, you should have already set up an OSG development 
environment consis瑩ng of header files and libraries, either by obtaining a prebuilt package 
compliant to your compiler version, or building everything with the source code. Please refer 
to Chapter 2Compila瑩on & Installa瑩on of OpenSceneGraph for details.
Time for action – say "Hello World" OSG style
Can't wait to have a taste of OSG programming? Here is the simplest example, which shows 
how to load an exis瑩ng model file and render it on the screen. It is much more interes瑩ng 
than just prin瑩ng a "Hello World" text on the console:
1.
Create a new project with any source code editor:
{
}
2.
Specify the OSG header loca瑩on and dependent libraries. You need to tell the 
linker to link your project with five libraries: OpenThreadsosgosgDBosgU瑩l, and 
osgViewer. You will learn more about configuring an OSG applica瑩on in the next 
chapter.
3.
Build your project. Make sure the file 
c
e
s
s
n
a
.
o
s
g
already exists in the same 
directory as the executable file, or in the path specified with the OSG_FILE_PATH 
environment variable.
4.
Check it out! You get a full-screen display with a flight model shown in the middle:
Chapter 1
[
15 
]
5.
Try to make some changes to what you are observing simply with your mouse. Press 
and hold the le晴, middle, and right mouse bu瑴ons when you are moving the mouse, 
to rotate, move, and scale the Cessna. Note that you are not actually modifying the 
model but changing the virtual view point instead.
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
An easy-to-read example was just created to show how powerful and clear OSG is. The 
func瑩on is used to read an exis瑩ng node file, that is, a scene 
graph that represents the Cessna model. The 
o
s
g
V
i
e
w
e
r
:
:
V
i
e
w
e
r
instance is then created 
to set the scene data and provide a simula瑩on loop for the applica瑩on.
Here, osgDB and osgViewer are namespaces, and Viewer is a class name. The naming style 
of a func瑩on or class member uses the same conven瑩on as the famous "camel-case", that is, 
the first word of the func瑩on name starts with a lowercase le瑴er, and addi瑩onal ones start 
with upper-case le瑴ers.
Live in community
Everyone interested in learning and making use of OSG is welcome to join the community 
at any 瑩me. There are several ways to get in touch with the core developing team and 
thousands of OSG programmers.
The Journey into OpenSceneGraph
[
16 
]
The preferred way is to use one of the two major public mailing lists. A mailing list here is a 
list of subscribers who have discussions on the same par瑩cular topic, via e-mail. To subscribe 
to an OSG mailing list, follow the appropriate links men瑩oned:
Mailing list
Subscrip瑩on link
Descrip瑩on
osg-users
o
p
e
n
s
c
e
n
e
g
r
a
p
h
.
o
r
g
General technique support 
and discussions
osg-submissions
Submission of code 
changes and bug fixes only
The forum, which is already linked to the mailing lists, is also provided for people who like 
this form: 
.
You will find a greater variety of OSG discussion groups on the internet, such as IRC channel, 
Google group, LinkedIn, and even a Chinese mirror:
‹
‹
‹
‹
Companies and individuals may ask for professional services, too, by making the appropriate 
payments. A number of professional OSG contractors are listed here as a reference:  
.
Finally, remember to visit the wiki website and developer blog at any 瑩me. This contains 
an enormous wealth of informa瑩on, including the latest news and download links for OSG 
distribu瑩ons:
‹
‹
Chapter 1
[
17 
]
Summary
This chapter gave a bird's eye view of OSG, in which we have drawn in mind a rough image 
about what we are going to learn about this widely used 3D graphics API. We sincerely hope 
the following chapters of this small book will serve as a ladder to help the readers, rung by 
rung, to get into the world of OSG-based programming.
In this chapter, we specially covered:
‹
The cornerstone and funder of OSG
‹
The basic structure of OSG including various func瑩onal modular libraries
‹
A quick view of how to write OSG-style applica瑩ons
‹
The way to join the OSG community and obtain the latest news
Documents you may be interested
Documents you may be interested