Developing Visual Components
[
308 
]
10. 
The par瑩cle system, which is actually a drawable object, should be added to a 
leaf node of the scene graph. A晴er that, we add all par瑩cle-related nodes to 
the 
p
a
r
e
n
t
node. Here is an interes瑩ng issue of world and local coordinates, 
which will be discussed later:
r
e
t
u
r
n
p
s
.
g
e
t
(
)
;
11. 
Now let's return to the main entry. Firstly, we create a new transforma瑩on node 
for loca瑩ng the par瑩cle system:
12. 
Create all par瑩cle system components and, add them to the input transforma瑩on 
node. The par瑩cle system should also be registered to a par瑩cle system updater,  
using the 
a
d
d
P
a
r
t
i
c
l
e
S
y
s
t
e
m
(
)
method.
)
;
13. 
Add all of the nodes above to the scene's root node, including a small axes model 
(that can be found in the sample data folder, see Chapter 2Compila瑩on and 
Installa瑩on of OpenSceneGraph for details) as a reference. A晴er that, start the 
viewer and just take a seat:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
Pdf split file - 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 apart; break a pdf file
Pdf split file - 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 parts; pdf insert page break
Chapter 11
[
309 
]
14. 
Our par瑩cle fountain is finally finished! Zoom in and you will find that all par瑩cles 
start from a point on the posi瑩ve X axis, at x = 1. Now, with just a few simple fixed-
func瑩on a瑴ributes, par瑩cles are rendered as well-textured points, and each par瑩cle 
element appears much like a water drop because of the blending opera瑩on:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
In the above image, we can find out that the whole par瑩cle system is translated to (1, 0, 0) in 
the world. That's because we add the emi瑴er, the program, and the par瑩cle system's parent 
to a transforma瑩on node. But, in fact, the result will be different if we put one of the three 
elements under the transforma瑩on node and the other two under the root node. Adding 
only the 
o
s
g
:
:
G
e
o
d
e
node to an 
o
s
g
:
:
T
r
a
n
s
f
o
r
m
will make the en瑩re par瑩cle system 
move with it; but adding only the emi瑴er will change the transform behavior of new-born 
par瑩cles but will leave any exis瑩ng ones in the world coordinate. Similarly, only adding the 
program node will make the parent transforma瑩on node only affect the operators.
A good example is to design flight jets. While spiraling in the sky, the flight plume's loca瑩on 
and direc瑩on will vary at any 瑩me. Using an 
o
s
g
:
:
M
a
t
r
i
x
T
r
a
n
s
f
o
r
m
as the parent of 
the par瑩cle emi瑴er will be helpful in represen瑩ng such a par瑩cle-based scenario. The 
par瑩cle system and the updater should not be placed under the same transforma瑩on node; 
otherwise all old par瑩cles in the air will move and rotate with it, too, which is certainly 
unreasonable in reality.
Online Split PDF file. Best free online split PDF tool.
Split PDF file. Just upload your file by clicking on the blue button or drag-and-drop your PDF file into the drop area. Then set your PDF file split settings.
break up pdf into individual pages; break a pdf
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Also able to uncompress PDF file in VB.NET programs. Offer flexible and royalty-free developing library license for VB.NET programmers to compress PDF file.
pdf split file; split pdf files
Developing Visual Components
[
310 
]
Have a go hero – designing a rotary sprinkler
Have you ever seen a rotary sprinkler? It consists of at least one rounded head that can 
automa瑩cally rotate 360 degrees and spray water around the sprinkler's diameter. To create 
such a machine with a simple cylinder model and the par瑩cle system, you have to design a 
modular emi瑴er with the shooter shoo瑩ng par瑩cles to a specified horizontal direc瑩on, and a 
modular program with the gravity accelera瑩on operator.
As a hint, the default radial shooter (
) uses two angles, 
t
h
e
t
a
and 
p
h
i
, within specified ranges, in order to determine a random direc瑩on of 
par瑩cles, for example:
To rotate the ini瑩al direc瑩on of emi瑴ng par瑩cles, you can either use an update callback  
that changes the theta and phi ranges, or consider adding a transforma瑩on node as the 
emi瑴er's parent.
Creating shadows on the ground
Shadow is also an important component of 3D applica瑩ons. When construc瑩ng massive 3D 
scenes like digital ci瑩es, modelers may first design and compute lights on buildings, models, 
and the ground in modeling so晴ware like 3dsmax, Maya, and Blender, and then bake the 
shadows to these models' textures. Then, real-瑩me applica瑩ons will read the model files 
with textures, and the shadows are then rendered sta瑩cally in the rendering window.
Real-瑩me shadows are also possible, but not for unlimited use. The osgShadow library 
provides a range of shadow techniques on a scene graph that needs to have shadows cast 
upon it. The core class, named 
, should be used as the root 
node of these shadowy sub-graphs. It accepts an 
instance 
as the technique used to implement shadowing. Deriving the technique class will extend 
the scene graph to support more algorithms and solu瑩ons, which will enrich the shadow 
func瑩onali瑩es.
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Well-designed APIs are provided. Splitting PDF File. If you want to split PDF file into two or small files, you may refer to this online guide.
break pdf; c# print pdf to specific printer
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
Professional VB.NET PDF file merging SDK support Visual Studio .NET. Merge PDF without size limitation. Append one PDF file to the end of another one in VB.NET.
pdf split pages; split pdf into multiple files
Chapter 11
[
311 
]
Time for action – receiving and casting shadows
Our goal is to show you the construc瑩on of a scene by cas瑩ng shadows on models. It always 
includes a specific shadow scene root, an inbuilt or custom shadow technique, and child 
nodes with a dis瑩nguishable receiving or cas瑩ng mask. A normal scene can't be shadowed 
without adding a shadow scene as the parent, and on the contrary, a shadowed scene graph 
can either remove the 
root node or remove the shadow 
technique object (by simply se瑴ng a null one) applied to the node to exclude all shadow 
computa瑩ons and effects. In this example, we just create and manage the scene graph under 
the shadow scene root, and make use of the predefined shadow mapping technique to 
render both real objects and shadows correctly.
1. 
Include the necessary headers:
2. 
The code for crea瑩ng the anima瑩on path is copied from Chapter 8Anima瑩ng Scene 
Objects. It uses a few sample control points to generate a circle, which can then be 
applied to an 
to implement a 瑩me-varying
transforma瑩on pathway:
)
{
{
)
;
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Reduce image resources: Since images are usually or large size, images size reducing can help to reduce PDF file size effectively.
a pdf page cut; break a pdf password
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Professional C#.NET PDF SDK for merging PDF file merging in Visual Studio .NET. Append one PDF file to the end of another and save to a single PDF file.
break password pdf; break a pdf into smaller files
Developing Visual Components
[
312 
]
}
}
3. 
Set masks of shadow receivers and casters. The AND opera瑩on of these two 
masks must yield 0:
4. 
Create the ground model. This only receives shadows from other scene objects, so 
performing an AND opera瑩on on its node mask and the receiver mask should return  
a non-zero value, and the bitwise AND between the node mask and the caster  
mask should always return 0. Therefore, we can determine the node mask according  
to such principles:
)
;
5. 
Set the Cessna model, which also accepts an update callback to perform path 
anima瑩on. In our example, it only casts a shadow on the ground and other  
scene objects:
)
;
6. 
Add a dump truck model onto the ground using an approximate transla瑩on 
matrix. It receives a shadow from the Cessna circling overhead, and casts a  
shadow onto the ground. This means that we have to set an appropriate node  
mask to retrieve a non-zero value while performing a bitwise AND with the union  
of both the receiver and caster masks:
C# Word - Split Word Document in C#.NET
C# DLLs: Split Word File. Add references: RasterEdge.Imaging.Basic.dll. using RasterEdge.XDoc.Word; Split Word file into two files in C#.
pdf file specification; pdf no pages selected to print
C# PowerPoint - Split PowerPoint Document in C#.NET
File: Split PowerPoint Document. |. Home ›› XDoc.PowerPoint ›› C# PowerPoint: Split PowerPoint Document. Split PowerPoint file into two files in C#.
break pdf password; pdf format specification
Chapter 11
[
313 
]
)
;
7. 
Set a light source for producing shadows. We specify the parallel light's direc瑩on 
with the 
s
e
t
P
o
s
i
t
i
o
n
(
)
method to generate declining shadows here:
0
.
0
)
)
;
)
;
)
;
8. 
We must set a shadow technique here. There are already several OpenGL-based 
shadow techniques implemented by organiza瑩ons and individuals, including 
shadow mapping using projec瑩ve texture mapping, shadow volumes realized by 
stencil buffer, and other implementa瑩ons. We choose the famous and effec瑩ve 
shadow mapping (
o
s
g
S
h
a
d
o
w
:
:
S
h
a
d
o
w
M
a
p
) technique, and set its necessary 
parameters including the light source, shadow texture's size, and unit:
9. 
Set the shadow scene's root node, and apply the technique instance, as well as 
shadow masks to it:
10. 
Add all models and the light source to the root and start the viewer:
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
Developing Visual Components
[
314 
]
11. 
With a simple light source, and the most frequently-used and stable shadow 
mapping technique, we can now render the ground, Cessna, and dump truck in a  
shadowed scene. You may change the texture resolu瑩on with 
s
e
t
T
e
x
t
u
r
e
S
i
z
e
(
)
method, or switch to other shadow techniques to see if there are any changes  
or improvements:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
The 
s
e
t
N
o
d
e
M
a
s
k
(
)
was introduced in Chapter 9Interac瑩ng with Outside Elements. There, 
it was used for indica瑩ng the intersec瑩on visitor to pass a specified sub-scene graph. But 
this 瑩me, we make use of this method to dis瑩nguish between the receiver and casters of 
shadows. Here, it performs a bitwise logical AND opera瑩on on the shadow scene node's 
masks, instead of the previous node visitor's traversal mask.
Chapter 11
[
315 
]
The 
s
e
t
N
o
d
e
M
a
s
k
(
)
can even be used to cull the node from the to-be-rendered scene, 
that is, to remove certain sub-graphs from the rendering pipeline. In the cull traversal of the 
OSG backend, each node's mask value will be computed with the camera node's cull mask, 
which is set by 
s
e
t
C
u
l
l
M
a
s
k
(
)
method of the 
o
s
g
:
:
C
a
m
e
r
a
class. Therefore, nodes and 
their sub-graphs will not be drawn if the node mask is 0, because the AND opera瑩on always 
returns 0 in the culling process.
Note that the current OSG shadow map implementa瑩on only handles cast shadow masks of 
nodes. It will adapt the shadow map to fit the bounds of all objects set to cast shadows, but 
you have to handle objects that do not need to receive shadows yourselves, for example, 
don't add them to the shadow scene node. In prac瑩ce, almost all objects will be set to 
receive shadows, and only the ground should be set to not cast shadows.
Have a go hero – testing other shadow techniques
There are more shadow techniques besides shadow mapping, including the simplest 
implementa瑩on using only textures and fixed-func瑩ons, volume algorithm using the stencil 
buffer (not fully completed at present), so晴-edged shadows, parallel-split shadows, light 
space perspec瑩ve shadows, and so on.
You may find a brief introduc瑩on to them at: 
.
The knowledge of how to create advanced graphical effects (shadows is only one field) is 
profound. If you have an interest in learning more, you can read some advanced books, such 
as Real-瑩me rendering by Akenine-MöllerHainesand Hoffman, and Computer Graphics: 
Principles and Prac瑩ce by FoleyVan Dam et al.
Now, choose one of the best performers among these shadow techniques. Another op瑩on 
is to design your own shadow techniques, if your applica瑩on development requirements 
cannot be met by exis瑩ng shadow techniques and there is a tangible benefit to developing  
at your own risk.
Implementing special effects
The osgFX library provides a special effects framework. It is a li瑴le analogous to the 
osgShadow NodeKits, which has a shadow scene as the parent of all shadowy sub-graphs. 
The 
o
s
g
F
X
:
:
E
f
f
e
c
t
class, which is derived from 
o
s
g
:
:
G
r
o
u
p
, implements special effects 
on its child nodes, but never affects its siblings and parent nodes.
Developing Visual Components
[
316 
]
The 
o
s
g
F
X
:
:
E
f
f
e
c
t
is a pure base class that doesn't realize actual effects at all. Its 
deriva瑩ves include anisotropic ligh瑩ng, highlights, cartoons, bump mapping, and outline  
and scribe effect implementa瑩ons, and it can be extended at any 瑩me for different purposes.
Time for action – drawing the outline of models
Outlining an object is a prac瑩cal technique for represen瑩ng special effects in gaming, 
mul瑩media, and industry applica瑩ons. One implementa瑩on in OpenGL is to write a constant 
value into the stencil buffer and then render the object with thick wireframe lines. A晴er the 
two-pass rendering process, an outline around the object will be populated, the thickness of 
which is just one half of the wireframe's. Fortunately, this has already been implemented in 
the osgFX library, in the 
o
s
g
F
X
:
:
O
u
t
l
i
n
e
class—a derived class of 
o
s
g
F
X
:
:
E
f
f
e
c
t
.
1. 
Include the necessary headers:
2. 
Load a Cessna model for outlining:
)
;
3. 
Create a new outline effect node. Set the width and color parameters, and add the 
model node as the child:
4. 
As discussed before, outlining requires the stencil buffer in order to accurately 
render the results. So we have to set valid stencil bits for the rendering 
windows in the 
instance. The stencil bits is se瑴ng 
0 by default, which means that the stencil buffer will not be available.
5. 
Before star瑩ng the viewer, don't forget to reset the clear mask, in order to also 
clear stencil bits every frame. The outline effect node is used as the root node 
here. It can also be added to a more complex scene graph for rendering.
)
;
Chapter 11
[
317 
]
r
e
t
u
r
n
v
i
e
w
e
r
.
r
u
n
(
)
;
6. 
That's it! This is really a simple example when compared to other examples 
in this chapter. However, it may not be easy to realize a similar one by using 
tradi瑩onal nodes and a瑴ached state sets. The osgFX library uses the concept 
of mul瑩-pass rendering here to realize such kinds of special effects:
W
h
a
t
j
u
s
t
h
a
p
p
e
n
e
d
?
OSG's effect classes are actually collec瑩ons of state a瑴ributes and modes. They allow 
mul瑩ple state sets to be managed for a single host node. When traversing the scene graph
the node is traversed as many 瑩mes as the number of predefined state sets. As a result, the 
model will be drawn mul瑩ple 瑩mes (so-called mul瑩ple passes) in the rendering pipeline, 
each of which applies different a瑴ributes and modes, and is then combined with previous 
passes.
For outlining implementa瑩on, there are two passes defined internally: firstly, the model 
is drawn with the stencil buffer set to 1 if passable; secondly, the model is drawn again in 
wireframe mode, with a thick enough line width and another stencil test process. Pixels will 
only be drawn to the frame buffer if the stencil buffer is not set the last 瑩me, and thus the 
result has a colored outline. For be瑴er understanding of how this works, you are encouraged 
to take a look into the implementa瑩on of the 
o
s
g
F
X
:
:
O
u
t
l
i
n
e
class in the 
s
r
c
/
o
s
g
F
X
folder of the OSG source code.
Documents you may be interested
Documents you may be interested