Managing Scene Graph
[
118 
]
Time for action – analyzing the Cessna structure
User applica瑩ons may always search the loaded 
s
c
e
n
e
g
r
a
p
h
for nodes of interest a晴er 
loading a model file. For example, we might like to take charge of the transforma瑩on or 
visibility of the loaded model if the root node is 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
or 
o
s
g
:
:
S
w
i
t
c
h
. We 
might also be interested in collec瑩ng all transforma瑩on nodes at the joints of a skeleton, 
which can be used to perform character anima瑩ons later.
The analysis of the loaded model structure is important in that case. We will implement an 
informa瑩on prin瑩ng visitor here, which prints the basic informa瑩on of visited nodes and 
arranges them in a tree structure.
1. 
Include the necessary headers:
#
i
n
c
l
u
d
e
<
i
o
s
t
r
e
a
m
>
2. 
Declare the 
I
n
f
o
V
i
s
i
t
o
r
class, and define the necessary virtual methods. We only 
handle leaf nodes and common 
o
s
g
:
:
N
o
d
e
objects. The inline func瑩on 
s
p
a
c
e
s
(
)
is used for prin瑩ng spaces before node informa瑩on, to indicate its level in the tree 
structure:
{
p
u
b
l
i
c
:
 protected:
}
;
3. 
We will introduce two methods 
c
l
a
s
s
N
a
m
e
(
)
and 
l
i
b
r
a
r
y
N
a
m
e
(
)
, both of 
which return 
c
o
n
s
t
c
h
a
r
*
values, for instance, "Node" as the class name and "osg" 
as the library name. There is no trick in re-implemen瑩ng these two methods for 
different classes. The 
M
E
T
A
_
O
b
j
e
c
t
and 
M
E
T
A
_
N
o
d
e
macro defini瑩ons will do the 
work internally:
Acrobat split pdf - 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 a pdf into multiple files; break pdf into pages
Acrobat split pdf - 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
pdf specification; break pdf documents
Chapter 5
[
119 
]
{
     _level++;
_
l
e
v
e
l
-
-
;
}
4. 
The implementa瑩on of the 
a
p
p
l
y
(
)
overloaded method with the 
o
s
g
:
:
G
e
o
d
e
&
parameter is slightly different from the previous one. It iterates all a瑴ached 
drawables of the 
o
s
g
:
:
G
e
o
d
e
node and prints their informa瑩on, too. Be aware of 
the calling 瑩me of 
t
r
a
v
e
r
s
e
(
)
here, which ensures that the level of each node in 
the tree is correct.
{
     _level++;
{
 }   
_
l
e
v
e
l
-
-
;
}
5. 
In the main func瑩on, use 
to read a file from command 
line arguments:
i
f
(
!
r
o
o
t
)
{
r
e
t
u
r
n
-
1
;
}
.NET PDF Document Viewing, Annotation, Conversion & Processing
Merge, split PDF files. Insert, delete PDF pages. Edit, update, delete PDF annotations from PDF file. Print. Support for all the print modes in Acrobat PDF.
break up pdf into individual pages; reader split pdf
C# PDF Converter Library SDK to convert PDF to other file formats
manipulate & convert standard PDF documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat.
pdf split; break pdf password
Managing Scene Graph
[
120 
]
6. 
Use the customized 
I
n
f
o
V
i
s
i
t
o
r
to visit the loaded model now. You will have 
no瑩ced that the 
s
e
t
T
r
a
v
e
r
s
a
l
M
o
d
e
(
)
method is called in the constructor of the 
visitor in order to enable the traversal of all of its children:
7. 
Start the viewer or not. This depends on your opinion, because our visitor has 
already finished its mission:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
8. 
Assuming that your executable file is 
M
y
P
r
o
j
e
c
t
.
e
x
e
, in the prompt, type:
9. 
You may get following informa瑩on on the console:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
You can easily draw the structure of the input afire Cessna model now. It explicitly includes 
an 
o
s
g
:
:
G
e
o
d
e
node with a geometry object, which contains the geometric data of the 
Cessna. The geometry node can be transformed by its parent 
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
node. The whole model is managed under an 
o
s
g
:
:
G
r
o
u
p
node, which is returned by the 
or 
func瑩ons.
Other classes with the prefix 
o
s
g
P
a
r
t
i
c
l
e
may s瑩ll seem confusing at present. 
They actually represent the smoke and fire par瑩cle effects of the Cessna, which will be 
introduced in Chapter 8Anima瑩ng Scene Objects.
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
It can be used standalone. JPEG to PDF Converter is able to convert image files to PDF directly without the software Adobe Acrobat Reader for conversion.
break pdf into smaller files; a pdf page cut
PDF to WORD Converter | Convert PDF to Word, Convert Word to PDF
PDF to Word Converter has accurate output, and PDF to Word Converter doesn't need the support of Adobe Acrobat & Microsoft Word.
break apart a pdf file; break pdf into separate pages
Chapter 5
[
121 
]
Now we are able to modify the primi瑩ve sets of the model, or control the par瑩cle system, 
based on the results of visi瑩ng the scene graph. To archive this purpose, now let's just save 
the specified node pointer to a member variable of your own visitor class, and reuse it in 
future code.
Summary
This chapters taught how to implement a typical scene graph by using OSG, which shows 
the usage of various types of scene graph nodes, with a special focus on the assembly of 
the graph tree and how to add state objects like the commonly used 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
o
s
g
:
:
S
w
i
t
c
h
o
s
g
:
:
L
O
D
, and 
o
s
g
:
:
P
r
o
x
y
N
o
d
e
classes. We specifically covered:
‹
How to u瑩lize various 
o
s
g
:
:
G
r
o
u
p
and 
o
s
g
:
:
G
e
o
d
e
nodes to assemble a basic 
hierarchy graph and handle parent and children nodes
‹
How to realize the spa瑩al transform by using 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
, based on 
the understanding of the concept of matrix and its implementa瑩on—the 
o
s
g
:
:
M
a
t
r
i
x
variables
‹
How to use the 
o
s
g
:
:
S
w
i
t
c
h
node to shi晴 the rendering status of scene nodes
‹
How to decide upon the detail of rendering complexity for scene nodes, by using  
the 
o
s
g
:
:
L
O
D
class
‹
Using the 
o
s
g
:
:
P
r
o
x
y
N
o
d
e
and 
o
s
g
:
:
P
a
g
e
d
L
O
D
classes to balance the 
run瑩me scene load
‹
How to customize a node and enhance its features
‹
The basic concept of the visitor design pa瑴ern and its implementa瑩on in OSG
‹
Traversing a node and its sub-scene graph with the 
o
s
g
:
:
N
o
d
e
V
i
s
i
t
o
r
derived classes
C# powerpoint - PowerPoint Conversion & Rendering in C#.NET
documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. PowerPoint to PDF Conversion.
break password pdf; break a pdf
C# Windows Viewer - Image and Document Conversion & Rendering in
standard image and document in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Convert to PDF.
cannot print pdf no pages selected; acrobat split pdf bookmark
C# Word - Word Conversion in C#.NET
Word documents in .NET class applications independently, without using other external third-party dependencies like Adobe Acrobat. Word to PDF Conversion.
pdf format specification; acrobat split pdf pages
VB.NET PDF: How to Create Watermark on PDF Document within
logo) on any desired PDF page. And with our PDF Watermark Creator, users need no external application plugin, like Adobe Acrobat.
acrobat separate pdf pages; pdf split pages in half
6
Creating Realistic 
Rendering Effects
Any geometry model in a 3D scene is composed of ver瑩ces, texture, ligh瑩ng, 
and shading informa瑩on. Rendering is, in the graphics pipeline, the last major 
step, genera瑩ng the image from the defined model with a number of visible 
features, for example, the brightness, color, and detail of the surface that 
the viewer sees. OSG has encapsulated almost all of the OpenGL's rendering 
interfaces, including ligh瑩ng, material, texture, alpha test, image blending, 
fog effect, as well as the implementa瑩on of vertex, geometry, and fragment 
shaders in OpenGL Shading Language. 
This chapter will give a detailed introduc瑩on to
‹
Understanding the concept of a state machine and the encapsula瑩on of it in OSG
‹
How to set up different rendering a瑴ributes and modes for scene objects
‹
How to inherit rendering states in the scene graph
‹
Realizing various fixed-func瑩on rendering effects in OSG
‹
How to control the scene lights, which is a posi瑩onal state
‹
How to add in textures and set texture coordinates of geometries
‹
Controlling the rendering order for drawing transparent and translucent objects
‹
Working with the vertex, geometry, and fragment shaders, with uniform variables
GIF to PDF Converter | Convert GIF to PDF, Convert PDF to GIF
and convert PDF files to GIF images with high quality. It can be functioned as an integrated component without the use of external applications & Adobe Acrobat
acrobat split pdf; pdf splitter
DICOM to PDF Converter | Convert DICOM to PDF, Convert PDF to
Different from other image converters, users do not need to load Adobe Acrobat or any other print drivers when they use DICOM to PDF Converter.
pdf no pages selected to print; pdf file specification
Crea瑩ng Realis瑩c Rendering Effects
[
124 
]
Encapsulating the OpenGL state machine
Typically, OpenGL employs a state machine to keep track of all rendering related states. The 
rendering states are collec瑩ons of state a瑴ributes like scene lights, materials, textures and 
texture environments, and state modes, which can be switched on or off using the OpenGL 
func瑩ons 
g
l
E
n
a
b
l
e
(
)
or 
g
l
D
i
s
a
b
l
e
(
)
.
When a rendering state is set, it will remain in effect un瑩l some other func瑩on changes it. 
The OpenGL pipeline internally maintains a state stack to save or restore rendering states 
at any 瑩me.
The state machine gives developers exact control over current and saved rendering states
However, it may not be suitable for direct use in a scene graph structure. For this reason, 
OSG uses the 
o
s
g
:
:
S
t
a
t
e
S
e
t
class to encapsulate the OpenGL state machine, and 
manages the push and pop opera瑩ons of various rendering state sets in the culling and 
rendering traversals of a scene graph.
An 
o
s
g
:
:
S
t
a
t
e
S
e
t
instance contains a subset of different OpenGL states, and can be 
applied to an 
o
s
g
:
:
N
o
d
e
or 
o
s
g
:
:
D
r
a
w
a
b
l
e
object by using the 
s
e
t
S
t
a
t
e
S
e
t
(
)
method. For example, you may add a newly-allocated state set to a node variable:
A safer way is to use the 
method, which ensures that a valid 
state set is always returned and automa瑩cally a瑴ached to the node or drawable object if 
necessary:
The 
o
s
g
:
:
N
o
d
e
or 
o
s
g
:
:
D
r
a
w
a
b
l
e
class manages the 
o
s
g
:
:
S
t
a
t
e
S
e
t
member variable 
with the smart pointer 
o
s
g
:
:
r
e
f
_
p
t
r
<
>
. It means that the state set can be shared by 
mul瑩ple scene objects, and will be destroyed when no longer used by any of them.
Attributes and modes
OSG defines an 
o
s
g
:
:
S
t
a
t
e
A
t
t
r
i
b
u
t
e
class for recording rendering state a瑴ributes. It is a 
virtual base class which can be inherited to implement different rendering a瑴ributes such as 
lights, materials, and fogs.
Chapter 6
[
125 
]
Rendering modes perform like switches that can be enabled or disabled. Besides, it contains 
an enumera瑩on parameter that is used to indicate the type of the OpenGL mode. Because  
of the simplicity, it is unnecessary to design a 
S
t
a
t
e
M
o
d
e
base class for rendering modes
Note that some瑩mes a rendering mode is associated with an a瑴ribute, for instance, the 
mode 
G
L
_
L
I
G
H
T
I
N
G
enables light variables to be sent to the OpenGL pipeline when set to 
on, and disables scene ligh瑩ng contrariwise.
The 
o
s
g
:
:
S
t
a
t
e
S
e
t
class divides a瑴ributes and modes into two groups: texture and 
non-texture. It has several member methods to add non-texture a瑴ributes and modes  
to the state set itself:
1. The public method 
s
e
t
A
t
t
r
i
b
u
t
e
(
)
adds an 
o
s
g
:
:
S
t
a
t
e
A
t
t
r
i
b
u
t
e
derived 
object to the state set. A瑴ributes of the same type cannot coexist in one state set
The previous set one will just be overwri瑴en by the new one.
2. The public method 
s
e
t
M
o
d
e
(
)
a瑴aches a mode enumera瑩on to the state set and 
sets its value to 
or 
which means to enable or disable the mode.
3. The public method 
a瑴aches a rendering a瑴ribute and 
its associated mode to the state set, and sets the switch value (
O
N
by default) at the 
same 瑩me. Be aware that not every a瑴ribute has a corresponding mode, but you 
can always make use of this method without being indecisive.
To a瑴ach an a瑴ribute 
a
t
t
r
and its associated mode to the 
s
t
a
t
e
s
e
t
variable, type the 
following code:
Texture a瑴ributes and modes have to assign an extra unit parameter to specify the texture 
mapping unit to be applied to, so 
o
s
g
:
:
S
t
a
t
e
S
e
t
provides a few more public methods, 
each with a Texture infix, including 
s
e
t
T
e
x
t
u
r
e
M
o
d
e
(
)
, and 
. In order to a瑴ach a texture a瑴ribute 
t
e
x
a
t
t
r
and 
its associated mode to the 
s
t
a
t
e
s
e
t
variable, and specify the texture unit 
0
, just type:
Crea瑩ng Realis瑩c Rendering Effects
[
126 
]
Time for action – setting polygon modes of different nodes
We are going to select the polygon rasteriza瑩on mode of a loaded model. The 
o
s
g
:
:
P
o
l
y
g
o
n
M
o
d
e
class, which is derived from the 
o
s
g
:
:
S
t
a
t
e
A
t
t
r
i
b
u
t
e
base class, 
will be used to achieve this goal. It simply encapsulates OpenGL's 
g
l
P
o
l
y
g
o
n
M
o
d
e
(
)
func瑩on and implements interfaces for specifying face and drawing mode parameters, and 
thus changes the final rasteriza瑩on of the a瑴ached node.
1.
Include the necessary headers:
2.
We will work on the basis of the transforma瑩on example in the last chapter. We 
create two 
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
nodes and make them share the same 
loaded Cessna model. The two transforma瑩on nodes are placed at different 
posi瑩ons in the 3D world, which will display two Cessna models as the result:
"
c
e
s
s
n
a
.
o
s
g
"
)
;
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
;
2
5
.
0
f
,
0
.
0
f
,
0
.
0
f
)
)
;
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
;
0
f
)
)
;
3.
Now, we will add an 
o
s
g
:
:
P
o
l
y
g
o
n
M
o
d
e
rendering a瑴ribute to the associated 
state set of the node 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
. It has a 
s
e
t
M
o
d
e
(
)
method which 
accepts two parameters: the face that the mode applied to, and the mode should  
be in which polygons will be rasterized:
Chapter 6
[
127 
]
4.
The next step is familiar. Now we can add the nodes to a root node, and start the 
viewer to see if anything has changed:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
5.
The Cessna model at the posi瑩on (-25.09, 0.0, 0.0), or on the le晴 of the 
ini瑩al display window, is drawn with outlined front and back facing polygons. 
On the contrary, the model on the right is s瑩ll fully filled as usual:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
With prior knowledge of the OpenGL polygon mode, we can easily imagine the parameters 
required by the 
s
e
t
M
o
d
e
(
)
method of the 
o
s
g
:
:
P
o
l
y
g
o
n
M
o
d
e
class. The first parameter 
can be one of 
B
A
C
K
, and 
F
R
O
N
T
_
A
N
D
_
B
A
C
K
, corresponding 
to the OpenGL enumera瑩ons 
G
L
_
F
R
O
N
T
G
L
_
B
A
C
K
, and 
G
L
_
F
R
O
N
T
_
A
N
D
_
B
A
C
K
. The second 
parameter can be one of 
L
I
N
E
, and 
F
I
L
L
, which correspond 
to 
G
L
_
P
O
I
N
T
G
L
_
L
I
N
E
, and 
G
L
_
F
I
L
L
. OSG needs no more tricks when encapsula瑩ng 
OpenGL rendering states!
The polygon mode doesn't have an associated mode, that is, it doesn't require calling 
the OpenGL 
g
l
E
n
a
b
l
e
(
)
/
g
l
D
i
s
a
b
l
e
(
)
func瑩ons, nor making use of OSG state set's 
s
e
t
M
o
d
e
(
)
method.
The 
method can also work properly here, but the switch value 
(
O
N
/
O
F
F
) is of no avail in this case.
Documents you may be interested
Documents you may be interested