Crea瑩ng Realis瑩c Rendering Effects
[
128 
]
Inheriting render states
The state set of a node will affect the current node and its children. For example, the 
o
s
g
:
:
P
o
l
y
g
o
n
M
o
d
e
a瑴ribute set to node 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
will make all of its children 
display as outlined. However, a child node's state set can override its parent's, that is, the 
rendering states will be inherited from the parent node unless a child node changes the 
behavior. The following image shows how different polygon mode states are traversed an 
imaginary scene graph:
Some瑩mes you may want different behaviors. For example, in common 3D editor so晴ware, 
users can load mul瑩ple models from files and render all of them as textured, wireframe, or 
solid, no ma瑴er what the previous state of each model is. In other word, all children models 
in the editor should inherit a unified a瑴ribute regardless of what they have set before. This 
can be implemented in OSG by using an 
flag, such as:
For se瑴ng rendering modes, or a瑴ribute and modes, use the bitwise OR operator:
Returning to the topic of 3D editor so晴ware. Imagine that you select a model by using 
the mouse pointer; there will be a wireframe bounding box displayed to indicate that the 
model is selected. The selec瑩on box will never be affected by the textured/wireframe/solid 
states, that is, the a瑴ribute or mode is immune from it's parent's override. OSG uses an 
flag to support this.
Pdf rotate single page - 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
split pdf; break pdf
Pdf rotate single page - 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
can't select text in pdf file; combine pages of pdf documents into one
Chapter 6
[
129 
]
OSG has a third flag, 
, which is used to indicate that the 
current a瑴ribute or mode should be inherited from the parent node's state set. The applied 
a瑴ribute or mode will not actually be used in this situa瑩on.
Time for action – lighting the glider or not
We will show the usage of the 
O
V
E
R
R
I
D
E
and 
P
R
O
T
E
C
T
E
D
flags in the following short 
example. The root node will be set to 
O
V
E
R
R
I
D
E
, in order to force all children to inherit 
its a瑴ribute or mode. Meanwhile, the children will try to change their inheritance with or 
without a 
P
R
O
T
E
C
T
E
D
flag, which will lead to different results.
1.
Include the necessary headers:
2.
Create two 
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
nodes and make them both share a glider 
model. A晴er all, we don't want to use the well-known Cessna all the 瑩me. The glider 
is small in size, so only a small distance is required for the 
s
e
t
M
a
t
r
i
x
(
)
method:
"
g
l
i
d
e
r
.
o
s
g
"
)
;
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
;
0
.
5
f
,
0
.
0
f
,
0
.
0
f
)
)
;
3.
Add the two transforma瑩on nodes to the root:
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
And C# users may choose to only rotate a single page of PDF file or all the pages. See C# programming demos below. DLLs for PDF Page Rotation in C#.NET Project.
cannot print pdf file no pages selected; pdf insert page break
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Able to remove a single page from adobe PDF document in VB.NET. using RasterEdge. XDoc.PDF; How to VB.NET: Delete a Single PDF Page from PDF File.
break apart pdf; cannot select text in pdf
Crea瑩ng Realis瑩c Rendering Effects
[
130 
]
4.
Now we are going to set the rendering mode of each node's state set. The 
G
L
_
L
I
G
H
T
I
N
G
mode is a famous OpenGL enumera瑩on which can be used to 
enable or disable global ligh瑩ng of the scene. Note that the 
O
V
E
R
R
I
D
E
and 
P
R
O
T
E
C
T
E
D
flags are set to 
r
o
o
t
and 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
2
separately, along 
with an 
O
N
or 
O
F
F
switch value:
5.
Start the viewer:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
6.
The node 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
is placed on the le晴 side of the screen, without 
any obvious changes. However, 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
2
is completely different, 
even though it shares the same loaded model with 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
:
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
application. Able to remove a single page from PDF document. Ability Demo Code: How to Delete a Single PDF Page from PDF File in C#.NET. How to
pdf print error no pages selected; pdf split pages
VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.
anticlockwise in VB.NET. Rotate single specified page or entire pages permanently in PDF file in Visual Basic .NET. Batch change PDF page
break a pdf password; cannot select text in pdf file
Chapter 6
[
131 
]
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
You can first find out what a normal lighted glider looks like with the following command:
In this example, we are trying to change the 
G
L
_
L
I
G
H
T
I
N
G
modes of 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
and 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
2
to disable lights on them. Meanwhile, we have turned on the 
ligh瑩ng mode for the root node, and used an 
O
V
E
R
R
I
D
E
flag for all children to follow to 
retain their ligh瑩ng states.
The node 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
1
, as shown in the previous image, remains lighted in spite of 
its own se瑴ng. However, 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
2
uses a 
P
R
O
T
E
C
T
E
D
flag to prevent itself from 
being affected by the root. It becomes a li瑴le brighter as a result of "turning off" the light on 
its surfaces. This is simply because the geometries are now directly colored according to the 
original color arrays, without any more reac瑩on to the lights.
Changing the filename of 
to 
c
e
s
s
n
a
.
o
s
g
will produce two 
lighted models in this example, because the Cessna model turns on the 
G
L
_
L
I
G
H
T
I
N
G
mode 
inside its sub-scene graph, in order to override any previous states. Can you figure out how 
to disable the lights of 
t
r
a
n
s
f
o
r
m
a
t
i
o
n
2
node this 瑩me?
Playing with fixed-function effects
OSG supports almost all kinds of OpenGL rendering a瑴ributes and modes by using the 
o
s
g
:
:
S
t
a
t
e
A
t
t
r
i
b
u
t
e
derived classes. The following table is part of over 40 OSG 
components that encapsulate major OpenGL fixed-func瑩on states:
Type ID
Class name
Associated 
mode
Related OpenGL func瑩ons
A
L
P
H
A
F
U
N
C
o
s
g
:
:
A
l
p
h
a
F
u
n
c
G
L
_ALPHA_
T
E
S
T
g
l
A
l
p
h
a
F
u
n
c
(
)
B
L
E
N
D
F
U
N
C
o
s
g
:
:
B
l
e
n
d
F
u
n
c
G
L
_
B
L
E
N
D
g
l
B
l
e
n
d
F
u
n
c
(
)
and  
C
L
I
P
P
L
A
N
E
o
s
g
:
:
C
l
i
p
P
l
a
n
e
G
L
_
C
L
I
P
_
P
L
A
N
E
i
(i 
ranges from 
0 to 5)
g
l
C
l
i
p
P
l
a
n
e
(
)
C
O
L
O
R
M
A
S
K
o
s
g
:
:
C
o
l
o
r
M
a
s
k
-
g
l
C
o
l
o
r
M
a
s
k
(
)
How to C#: Basic SDK Concept of XDoc.PDF for .NET
insert, delete, re-order, copy, paste, cut, rotate, and save or query data and save the PDF document. The PDFPage class presents a single page in a PDFDocument
break a pdf into separate pages; pdf separate pages
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste, C#.NET rotate PDF pages, C# Users can view PDF document in single page or continue
break pdf into multiple files; break password on pdf
Crea瑩ng Realis瑩c Rendering Effects
[
132 
]
Type ID
Class name
Associated 
mode
Related OpenGL func瑩ons
C
U
L
L
F
A
C
E
o
s
g
:
:
C
u
l
l
F
a
c
e
G
L
_CULLFACE
g
l
C
u
l
l
F
a
c
e
(
)
D
E
P
T
H
o
s
g
:
:
D
e
p
t
h
G
L
_DEPTH_
T
E
S
T
g
l
D
e
p
t
h
F
u
n
c
(
)
,
g
l
D
e
p
t
h
R
a
n
g
e
(
)
and 
g
l
D
e
p
t
h
M
a
s
k
(
)
F
O
G
o
s
g
:
:
F
o
g
G
L
_
F
O
G
g
l
F
o
g
(
)
F
R
O
N
T
F
A
C
E
o
s
g
:
:
F
r
o
n
t
F
a
c
e
-
g
l
F
r
o
n
t
F
a
c
e
(
)
L
I
G
H
T
o
s
g
:
:
L
i
g
h
t
G
L
_LIGHTi
(i 
ranges from 
0 to 7)
g
l
L
i
g
h
t
(
)
L
I
G
H
T
M
O
D
E
L
o
s
g
:
:
L
i
g
h
t
M
o
d
e
l
-
g
l
L
i
g
h
t
M
o
d
e
l
(
)
L
I
N
E
S
T
I
P
P
L
E
o
s
g
:
:
L
i
n
e
S
t
i
p
p
l
e
G
L
_
L
I
N
E
_
S
T
I
P
P
L
E
g
l
L
i
n
e
S
t
i
p
p
l
e
(
)
L
I
N
E
W
I
D
T
H
o
s
g
:
:
L
i
n
e
W
i
d
t
h
-
g
l
L
i
n
e
W
i
d
t
h
(
)
L
O
G
I
C
O
P
o
s
g
:
:
L
o
g
i
c
O
p
G
L
_COLOR_
L
O
G
I
C
_
O
P
g
l
L
o
g
i
c
O
p
(
)
M
A
T
E
R
I
A
L
o
s
g
:
:
M
a
t
e
r
i
a
l
-
g
l
M
a
t
e
r
i
a
l
(
)
and 
g
l
C
o
l
o
r
M
a
t
e
r
i
a
l
(
)
P
O
I
N
T
o
s
g
:
:
P
o
i
n
t
G
L
_POINT_
S
M
O
O
T
H
g
l
P
o
i
n
t
P
a
r
a
m
e
t
e
r
(
)
P
O
I
N
T
S
P
R
I
T
E
o
s
g
:
:
P
o
i
n
t
S
p
r
i
t
e
G
L
_POINT_
S
P
R
I
T
E
_
A
R
B
O
p
e
n
G
L
p
o
i
n
t
s
p
r
i
t
e
f
u
n
c
t
i
o
n
s
P
O
L
Y
G
O
N
M
O
D
E
o
s
g
:
:
P
o
l
y
g
o
n
M
o
d
e
-
g
l
P
o
l
y
g
o
n
M
o
d
e
(
)
P
O
L
Y
G
O
N
O
F
F
S
E
T
o
s
g
:
:
P
o
l
y
g
o
n
O
f
f
s
e
t
G
L
_POLYGON_
O
F
F
S
E
T
_
P
O
I
N
T
and so on
g
l
P
o
l
y
g
o
n
O
f
f
s
e
t
(
)
P
O
L
Y
G
O
N
S
T
I
P
P
L
E
o
s
g
:
:
P
o
l
y
g
o
n
S
t
i
p
p
l
e
G
L
_POLYGON_
S
T
I
P
P
L
E
g
l
P
o
l
y
g
o
n
S
t
i
p
p
l
e
(
)
S
C
I
S
S
O
R
o
s
g
:
:
S
c
i
s
s
o
r
G
L
_SCISSOR_
T
E
S
T
g
l
S
c
i
s
s
o
r
(
)
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Both single page and multipage tiff image files can be created from PDF. Supports tiff compression selection. Supports for changing image size.
break pdf into multiple pages; pdf split file
VB.NET PDF: Basic SDK Concept of XDoc.PDF
insert, delete, re-order, copy, paste, cut, rotate, and save or query data and save the PDF document. The PDFPage class presents a single page in a PDFDocument
pdf rotate single page; break apart a pdf in reader
Chapter 6
[
133 
]
Type ID
Class name
Associated 
mode
Related OpenGL func瑩ons
S
H
A
D
E
M
O
D
E
L
o
s
g
:
:
S
h
a
d
e
M
o
d
e
l
-
g
l
S
h
a
d
e
M
o
d
e
l
(
)
S
T
E
N
C
I
L
o
s
g
:
:
S
t
e
n
c
i
l
G
L
_STENCIL_
T
E
S
T
g
l
S
t
e
n
c
i
l
F
u
n
c
(
)
,
g
l
S
t
e
n
c
i
l
O
p
(
)
, and 
g
l
S
t
e
n
c
i
l
M
a
s
k
(
)
T
E
X
E
N
V
o
s
g
:
:
T
e
x
E
n
v
-
g
l
T
e
x
E
n
v
(
)
T
E
X
G
E
N
o
s
g
:
:
T
e
x
G
e
n
G
L
_TEXTURE_
G
E
N
_
S
and so on
g
l
T
e
x
G
e
n
(
)
The Type ID column will retrieve specific a瑴ributes from a state set. It is used as the 
parameter of the method 
g
e
t
A
t
t
r
i
b
u
t
e
(
)
, for instance:
A valid pointer will be retrieved if you have set the polygon mode a瑴ribute to the 
s
t
a
t
e
s
e
t
variable before. Otherwise, 
g
e
t
A
t
t
r
i
b
u
t
e
(
)
will return NULL.
The Associated mode column of the table shows how OSG calls OpenGL modes when using 
. You may also check to see if a mode is turned on or off by 
using the 
g
e
t
M
o
d
e
(
)
method:
Here the enumera瑩on 
G
L
_
L
I
G
H
T
I
N
G
is used to enable or disable ligh瑩ng in the 
whole scene.
The Related OpenGL func瑩ons column iden瑩fies which OpenGL func瑩ons are encapsulated in 
an OSG a瑴ribute class. An OSG a瑴ribute class will always have a series of methods to specify 
related func瑩on parameters—OpenGL developers can thus migrate from their applica瑩ons 
to OSG without too many modifica瑩ons.
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
With VB.NET PDF SDK, PDF document page can be rotated to 90, 180, and 270 in clockwise. Both a single page and whole file pages can be rotated and saved as
can print pdf no pages selected; break a pdf file
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
all. This guiding page will help you merge two or more PDF documents into a single one in a Visual Basic .NET imaging application.
break pdf into multiple documents; split pdf files
Crea瑩ng Realis瑩c Rendering Effects
[
134 
]
Time for action – applying simple fog to models
We will take the fog effect as an ideal example of working with various rendering a瑴ributes 
and modes. OpenGL accepts one linear and two exponen瑩al fog equa瑩ons, which are 
supported by the 
o
s
g
:
:
F
o
g
class as well.
1.
Include the necessary headers:
#
i
n
c
l
u
d
e
<
o
s
g
/
F
o
g
>
2.
We would like to first create the fog a瑴ribute. Using the linear mode, we have to 
set the near and far distances by using 
s
e
t
S
t
a
r
t
(
)
and 
s
e
t
E
n
d
(
)
methods. 
We will also set the fog color, in order to generate a dust fog-like effect:
3.
We are going to load an example terrain model named 
l
z
.
o
s
g
, which can 
be located in the data directory indicated by the environment variable  
O
S
G
_
F
I
L
E
_
P
A
T
H
. The only work to do is to set the fog a瑴ribute and the 
associated mode to the node's state set.
4.
Start the viewer and manipulate the scene, in order to make the terrain and 
the fog have a be瑴er appearance:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
5.
As you scale the scene by using the right mouse bu瑴on, the terrain model 
will fade in and out of the fog in a smooth progression. This is a very basic 
environment effect, but the result can s瑩ll be fantas瑩c some瑩mes:
Chapter 6
[
135 
]
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
The OpenGL 
g
l
F
o
g
(
)
func瑩on supports the se瑴ng of parameters of various modes such as 
G
L
_
F
O
G
_
M
O
D
E
G
L
_
F
O
G
_
D
E
N
S
I
T
Y
G
L
_
F
O
G
_
S
T
A
R
T
, and 
G
L
_
F
O
G
_
E
N
D
. These are redefined 
in OSG as the 
s
e
t
M
o
d
e
(
)
s
e
t
D
e
n
s
i
t
y
(
)
s
e
t
S
t
a
r
t
(
)
, and 
s
e
t
E
n
d
(
)
methods, each of 
which has a paired 
g
e
t
*
(
)
method.
Here is an addi瑩onal trick about implemen瑩ng the fog effect: developers may set the fog 
coordinate of each vertex of geometry and use it as a distance value in the computa瑩on.  
This can be done by using the 
s
e
t
F
o
g
C
o
o
r
d
A
r
r
a
y
(
)
and 
methods of the 
o
s
g
:
:
G
e
o
m
e
t
r
y
class, in addi瑩on to specifying the fog coordinate source:
The current fragment depth will be used in the fog color computa瑩on instead, if the 
method's parameter is set to 
G
L
_
F
R
A
G
M
E
N
T
_
D
E
P
T
H
.
Have a go hero – searching for more effects
There are more OSG rendering a瑴ribute classes that have encapsulated OpenGL func瑩ons 
and parameters into public class methods. For details, you may read the API documenta瑩on 
included in the prebuilt packages, or look for declara瑩ons in the header files in order to learn 
how to make use of them.
Some easy-to-read and easy-to-use rendering a瑴ributes are 
o
s
g
:
:
C
o
l
o
r
M
a
s
k
o
s
g
:
:
L
i
n
e
W
i
d
t
h
, and 
o
s
g
:
:
S
h
a
d
e
M
o
d
e
l
. They have intui瑩ve methods for se瑴ng mask, 
width, and mode parameters, and can immediately make effects when a瑴aching to state  
sets of nodes and drawables. Have a try of these rendering a瑴ributes and see if you can 
master them with only the API manuals and class declara瑩ons.
Crea瑩ng Realis瑩c Rendering Effects
[
136 
]
Lights and light sources
Like OpenGL, OSG only supports up to eight fixed-func瑩on light sources for directly 
illumina瑩ng the 3D scene, and won't be able to automa瑩cally generate and cast shadows are 
on objects. Light rays commonly originate from certain light sources, travel in straight lines, 
reflected on or sca瑴ered off scene objects, and are finally perceived by the viewer's eye. The 
light source proper瑩es, the surface material proper瑩es, and normals of geometries are all 
necessary to implement complete ligh瑩ng effects.
The 
o
s
g
:
:
L
i
g
h
t
class provides neat methods for opera瑩ng on proper瑩es of a light source, 
including 
s
e
t
L
i
g
h
t
N
u
m
(
)
and 
g
e
t
L
i
g
h
t
N
u
m
(
)
for handling the OpenGL light number, 
s
e
t
A
m
b
i
e
n
t
(
)
and 
g
e
t
A
m
b
i
e
n
t
(
)
for the ambient component, 
s
e
t
D
i
f
f
u
s
e
(
)
and 
g
e
t
D
i
f
f
u
s
e
(
)
for the diffuse component of the light, and so on.
OSG also provides an 
o
s
g
:
:
L
i
g
h
t
S
o
u
r
c
e
class for adding lights to the scene graph. It has 
s
e
t
L
i
g
h
t
(
)
method and should be used as a leaf node with a single light a瑴ribute. All 
other nodes in the scene graph will be affected by the light source node if the corresponding 
G
L
_
L
I
G
H
T
i
mode is set. For instance:
.
.
.
.
.
.
Another more convenient solu瑩on for enabling specified light is the 
s
e
t
S
t
a
t
e
S
e
t
M
o
d
e
s
(
)
method, with which the light source will automa瑩cally a瑴ach the light number with the 
scene root:
Some瑩mes you may add children to an 
o
s
g
:
:
L
i
g
h
t
S
o
u
r
c
e
node, but this doesn't mean 
that you will light sub-graphs based on the hierarchical rela瑩onship to the node. It can be 
treated as a geometry represen瑩ng the physical shape of the light source.
Chapter 6
[
137 
]
The 
o
s
g
:
:
L
i
g
h
t
S
o
u
r
c
e
nodes can be placed under an 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
node. Then 
a point light can be translated according to the current transforma瑩on matrix. You may 
disable this feature by se瑴ng the reference frame of 
o
s
g
:
:
L
i
g
h
t
S
o
u
r
c
e
, such as:
Its meaning is similar to the 
s
e
t
R
e
f
e
r
e
n
c
e
F
r
a
m
e
(
)
method of the 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
class.
Time for action – creating light sources in the scene
By default, OSG automa瑩cally turns on the first light (
G
L
_
L
I
G
H
T
0
) and gives the scene a so晴, 
direc瑩onal light. However, this 瑩me we will create mul瑩ple lights by ourselves, and move 
them with transforma瑩on parent nodes. Be aware: only posi瑩onal lights can be translated.  
A direc瑩onal light has no origin and cannot be placed anywhere.
OpenGL and OSG both use the fourth component of the posi瑩on parameter to decide if 
a light is a point light. That is to say, if the fourth component is 0, the light is treated as a 
direc瑩onal source; otherwise it is posi瑩onal.
1.
Include the necessary headers:
2.
We create a func瑩on to create light sources for the scene graph. A light source 
should have a number (ranging from 0 to 7), a transla瑩on posi瑩on, and a color  
parameter. A point light is created because the fourth part of the posi瑩on vector  
is 1.0. A晴er that, we assign the light to a newly-created 
o
s
g
:
:
L
i
g
h
t
S
o
u
r
c
e
node, and add the light source to a translated 
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
node, 
which is then returned:
{
Documents you may be interested
Documents you may be interested