aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html556
1 files changed, 278 insertions, 278 deletions
diff --git a/libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html b/libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html
index 8c1fc51..126ef16 100644
--- a/libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html
+++ b/libraries/irrlicht-1.8/examples/08.SpecialFX/tutorial.html
@@ -1,278 +1,278 @@
1<html> 1<html>
2<head> 2<head>
3<title>Irrlicht Engine Tutorial</title> 3<title>Irrlicht Engine Tutorial</title>
4<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 4<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5</head> 5</head>
6 6
7<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> 7<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
8<br> 8<br>
9<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center"> 9<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center">
10 <tr> 10 <tr>
11 <td bgcolor="#666699" width="10"><b><a href="http://irrlicht.sourceforge.net" target="_blank"><img src="../../media/irrlichtlogo.jpg" width="88" height="31" border="0"></a></b></td> 11 <td bgcolor="#666699" width="10"><b><a href="http://irrlicht.sourceforge.net" target="_blank"><img src="../../media/irrlichtlogo.jpg" width="88" height="31" border="0"></a></b></td>
12 <td bgcolor="#666699" width="100%"> 12 <td bgcolor="#666699" width="100%">
13<div align="center"> 13<div align="center">
14<div align="left"><b><font color="#FFFFFF">Tutorial 8. Special Effects</font></b></div> 14<div align="left"><b><font color="#FFFFFF">Tutorial 8. Special Effects</font></b></div>
15 </div> 15 </div>
16 </td> 16 </td>
17 </tr> 17 </tr>
18 <tr bgcolor="#eeeeff"> 18 <tr bgcolor="#eeeeff">
19 <td height="90" colspan="2"> 19 <td height="90" colspan="2">
20 <div align="left"> 20 <div align="left">
21 <p>This tutorials describes how to do special effects. It shows how to 21 <p>This tutorials describes how to do special effects. It shows how to
22 use stencil buffer shadows, the particle system, billboards, dynamic 22 use stencil buffer shadows, the particle system, billboards, dynamic
23 light and the water surface scene node. </p> 23 light and the water surface scene node. </p>
24 <p>The program which is described here will look like this:</p> 24 <p>The program which is described here will look like this:</p>
25 <p align="center"><img src="../../media/008shot.jpg" width="259" height="204"><br> 25 <p align="center"><img src="../../media/008shot.jpg" width="259" height="204"><br>
26 </p> 26 </p>
27 </div> 27 </div>
28 </td> 28 </td>
29 </tr> 29 </tr>
30</table> 30</table>
31<br> 31<br>
32<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center"> 32<table width="95%" border="0" cellspacing="0" cellpadding="2" align="center">
33 <tr> 33 <tr>
34 <td bgcolor="#666699"> <b><font color="#FFFFFF">Lets start!</font></b></td> 34 <td bgcolor="#666699"> <b><font color="#FFFFFF">Lets start!</font></b></td>
35 </tr> 35 </tr>
36 <tr> 36 <tr>
37 <td height="90" bgcolor="#eeeeff" valign="top"> <div align="left"> 37 <td height="90" bgcolor="#eeeeff" valign="top"> <div align="left">
38 <div align="left"> 38 <div align="left">
39 <p>We start like in some tutorials before. Please note that this time, 39 <p>We start like in some tutorials before. Please note that this time,
40 the 'shadows' flag in createDevice() is set to true, for we want to 40 the 'shadows' flag in createDevice() is set to true, for we want to
41 have a dynamic shadow casted from an animated character. If your this 41 have a dynamic shadow casted from an animated character. If your this
42 example runs to slow, set it to false. The Irrlicht Engine checks 42 example runs to slow, set it to false. The Irrlicht Engine checks
43 if your hardware doesn't support the stencil buffer, and disables 43 if your hardware doesn't support the stencil buffer, and disables
44 shadows by itself, but just in case the demo runs slow on your hardware.</p> 44 shadows by itself, but just in case the demo runs slow on your hardware.</p>
45 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 45 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
46 <tr> 46 <tr>
47 <td> <pre><font color="#008000" size="2">#include &lt;irrlicht.h&gt; 47 <td> <pre><font color="#008000" size="2">#include &lt;irrlicht.h&gt;
48#include &lt;iostream&gt;<br> 48#include &lt;iostream&gt;<br>
49</font><font size="2"><b>using namespace </b>irr; 49</font><font size="2"><b>using namespace </b>irr;
50 50
51<font color="#008000">#pragma comment(lib, &quot;Irrlicht.lib&quot;) 51<font color="#008000">#pragma comment(lib, &quot;Irrlicht.lib&quot;)
52 52
53</font><b>int </b>main() 53</font><b>int </b>main()
54{ 54{
55 // ask user for driver<br> video::E_DRIVER_TYPE driverType;<br> 55 // ask user for driver<br> video::E_DRIVER_TYPE driverType;<br>
56 printf(&quot;Please select the driver you want for this example:\n&quot;\<br> &quot; (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n&quot;\<br> &quot; (d) Software Renderer\n (e) Apfelbaum Software Renderer\n&quot;\<br> &quot; (f) NullDevice\n (otherKey) exit\n\n&quot;);<br><br> char i;<br> std::cin &gt;&gt; i;<br><br> switch(i)<br> {<br> case 'a': driverType = video::EDT_DIRECT3D9;break;<br> case 'b': driverType = video::EDT_DIRECT3D8;break;<br> case 'c': driverType = video::EDT_OPENGL; break;<br> case 'd': driverType = video::EDT_SOFTWARE; break;<br> case 'e': driverType = video::EDT_BURNINGSVIDEO;break;<br> case 'f': driverType = video::EDT_NULL; break;<br> default: return 1;<br> } 56 printf(&quot;Please select the driver you want for this example:\n&quot;\<br> &quot; (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n&quot;\<br> &quot; (d) Software Renderer\n (e) Apfelbaum Software Renderer\n&quot;\<br> &quot; (f) NullDevice\n (otherKey) exit\n\n&quot;);<br><br> char i;<br> std::cin &gt;&gt; i;<br><br> switch(i)<br> {<br> case 'a': driverType = video::EDT_DIRECT3D9;break;<br> case 'b': driverType = video::EDT_DIRECT3D8;break;<br> case 'c': driverType = video::EDT_OPENGL; break;<br> case 'd': driverType = video::EDT_SOFTWARE; break;<br> case 'e': driverType = video::EDT_BURNINGSVIDEO;break;<br> case 'f': driverType = video::EDT_NULL; break;<br> default: return 1;<br> }
57 57
58 // create device and exit if creation failed<br> IrrlichtDevice *device = createDevice(driverType, 58 // create device and exit if creation failed<br> IrrlichtDevice *device = createDevice(driverType,
59 core::dimension2d&lt;s32&gt;(640, 480), 16, false, true); 59 core::dimension2d&lt;s32&gt;(640, 480), 16, false, true);
60 60
61 if (device == 0) 61 if (device == 0)
62 return 1; 62 return 1;
63 63
64 video::IVideoDriver* driver = device-&gt;getVideoDriver(); 64 video::IVideoDriver* driver = device-&gt;getVideoDriver();
65 scene::ISceneManager* smgr = device-&gt;getSceneManager();<font face="Courier New"> 65 scene::ISceneManager* smgr = device-&gt;getSceneManager();<font face="Courier New">
66</font></font></pre> 66</font></font></pre>
67 </td> 67 </td>
68 </tr> 68 </tr>
69 </table> 69 </table>
70 <p> For our environment, we load a .3ds file. It is a small room I modelled 70 <p> For our environment, we load a .3ds file. It is a small room I modelled
71 with Anim8or and exported it into the 3ds format because the Irrlicht 71 with Anim8or and exported it into the 3ds format because the Irrlicht
72 Engine did not support the .an8 format when I wrote this tutorial. 72 Engine did not support the .an8 format when I wrote this tutorial.
73 I am a very bad 3d graphic artist, and so the texture mapping is not 73 I am a very bad 3d graphic artist, and so the texture mapping is not
74 very nice in this model. Luckily I am a better programmer than artist, 74 very nice in this model. Luckily I am a better programmer than artist,
75 and so the Irrlicht Engine is able to create a cool texture mapping 75 and so the Irrlicht Engine is able to create a cool texture mapping
76 for me: Just use the mesh manipulator and create a planar texture 76 for me: Just use the mesh manipulator and create a planar texture
77 mapping for the mesh. If you want to see the mapping I made with Anim8or, 77 mapping for the mesh. If you want to see the mapping I made with Anim8or,
78 uncomment this line. I also did not figure out how to<br> 78 uncomment this line. I also did not figure out how to<br>
79 set the material right in Anim8or, it has a specular light color 79 set the material right in Anim8or, it has a specular light color
80 which I don't really<br> 80 which I don't really<br>
81 like. I'll switch it off too with this code.</p> 81 like. I'll switch it off too with this code.</p>
82 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 82 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
83 <tr> 83 <tr>
84 <td> <pre><font size=2> scene::IAnimatedMesh* mesh = smgr-&gt;getMesh( 84 <td> <pre><font size=2> scene::IAnimatedMesh* mesh = smgr-&gt;getMesh(
85 <font color="#FF0000">&quot;../../media/room.3ds&quot;</font>); 85 <font color="#FF0000">&quot;../../media/room.3ds&quot;</font>);
86 86
87 smgr-&gt;getMeshManipulator()-&gt;makePlanarTextureMapping( 87 smgr-&gt;getMeshManipulator()-&gt;makePlanarTextureMapping(
88 mesh-&gt;getMesh(<font color="#800080">0</font>), <font color="#800080">0.008f</font>); 88 mesh-&gt;getMesh(<font color="#800080">0</font>), <font color="#800080">0.008f</font>);
89 89
90 scene::ISceneNode* node = <font color="#800080">0</font>; 90 scene::ISceneNode* node = <font color="#800080">0</font>;
91 91
92 node = smgr-&gt;addAnimatedMeshSceneNode(mesh); 92 node = smgr-&gt;addAnimatedMeshSceneNode(mesh);
93 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/wall.jpg&quot;</font>)); 93 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/wall.jpg&quot;</font>));
94 node-&gt;getMaterial(0).SpecularColor.set(0,0,0,0);</font></pre></td> 94 node-&gt;getMaterial(0).SpecularColor.set(0,0,0,0);</font></pre></td>
95 </tr> 95 </tr>
96 </table> 96 </table>
97 <p> Now, for the first special effect: Animated water. It works like 97 <p> Now, for the first special effect: Animated water. It works like
98 this: The WaterSurfaceSceneNode takes a mesh as input and makes it 98 this: The WaterSurfaceSceneNode takes a mesh as input and makes it
99 wave like a water surface. And if we let this scene node use a nice 99 wave like a water surface. And if we let this scene node use a nice
100 material like the MT_REFLECTION_2_LAYER, it looks really cool. We 100 material like the MT_REFLECTION_2_LAYER, it looks really cool. We
101 are doing this with the next few lines of code. As input mesh, we 101 are doing this with the next few lines of code. As input mesh, we
102 create a hill plane mesh, without hills. But any other mesh could 102 create a hill plane mesh, without hills. But any other mesh could
103 be used for this, you could even use the room.3ds (which would look 103 be used for this, you could even use the room.3ds (which would look
104 really strange) if you wanted to. </p> 104 really strange) if you wanted to. </p>
105 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 105 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
106 <tr> 106 <tr>
107 <td> <pre> mesh = smgr-&gt;addHillPlaneMesh(<font color="#FF0000">&quot;myHill&quot;</font>, 107 <td> <pre> mesh = smgr-&gt;addHillPlaneMesh(<font color="#FF0000">&quot;myHill&quot;</font>,
108 core::dimension2d&lt;f32&gt;(<font color="#800080">20</font>,<font color="#800080">20</font>), 108 core::dimension2d&lt;f32&gt;(<font color="#800080">20</font>,<font color="#800080">20</font>),
109 core::dimension2d&lt;s32&gt;(<font color="#800080">40</font>,<font color="#800080">40</font>), <font color="#800080">0</font>, <font color="#800080">0</font>, 109 core::dimension2d&lt;s32&gt;(<font color="#800080">40</font>,<font color="#800080">40</font>), <font color="#800080">0</font>, <font color="#800080">0</font>,
110 core::dimension2d&lt;f32&gt;(<font color="#800080">0</font>,<font color="#800080">0</font>), 110 core::dimension2d&lt;f32&gt;(<font color="#800080">0</font>,<font color="#800080">0</font>),
111 core::dimension2d&lt;f32&gt;(<font color="#800080">10</font>,<font color="#800080">10</font>)); 111 core::dimension2d&lt;f32&gt;(<font color="#800080">10</font>,<font color="#800080">10</font>));
112 112
113 node = smgr-&gt;addWaterSurfaceSceneNode(mesh-&gt;getMesh(<font color="#800080">0</font>), <font color="#800080">3.0f</font>, <font color="#800080">300.0f</font>, <font color="#800080">30.0f</font>); 113 node = smgr-&gt;addWaterSurfaceSceneNode(mesh-&gt;getMesh(<font color="#800080">0</font>), <font color="#800080">3.0f</font>, <font color="#800080">300.0f</font>, <font color="#800080">30.0f</font>);
114 node-&gt;setPosition(core::vector3df(<font color="#800080">0</font>,<font color="#800080">7</font>,<font color="#800080">0</font>)); 114 node-&gt;setPosition(core::vector3df(<font color="#800080">0</font>,<font color="#800080">7</font>,<font color="#800080">0</font>));
115 115
116 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/stones.jpg&quot;</font>)); 116 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/stones.jpg&quot;</font>));
117 node-&gt;setMaterialTexture(<font color="#800080">1</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/water.jpg&quot;</font>)); 117 node-&gt;setMaterialTexture(<font color="#800080">1</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/water.jpg&quot;</font>));
118 118
119 node-&gt;setMaterialType(video::EMT_REFLECTION_2_LAYER<font size=3 face="Courier New">); 119 node-&gt;setMaterialType(video::EMT_REFLECTION_2_LAYER<font size=3 face="Courier New">);
120</font></pre></td> 120</font></pre></td>
121 </tr> 121 </tr>
122 </table> 122 </table>
123 <p> The second special effect is very basic, I bet you saw it already 123 <p> The second special effect is very basic, I bet you saw it already
124 in some Irrlicht Engine demos: A transparent billboard combined with 124 in some Irrlicht Engine demos: A transparent billboard combined with
125 a dynamic light. We simply create a light scene node, let it fly around, 125 a dynamic light. We simply create a light scene node, let it fly around,
126 an to make it look more cool, we attach a billboard scene node to 126 an to make it look more cool, we attach a billboard scene node to
127 it.</p> 127 it.</p>
128 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 128 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
129 <tr> 129 <tr>
130 <td> <pre><font size=2> <font color="#0A246A"><i>// create light 130 <td> <pre><font size=2> <font color="#0A246A"><i>// create light
131 131
132</i></font> node = smgr-&gt;addLightSceneNode(<font color="#800080">0</font>, core::vector3df(<font color="#800080">0</font>,<font color="#800080">0</font>,<font color="#800080">0</font>), 132</i></font> node = smgr-&gt;addLightSceneNode(<font color="#800080">0</font>, core::vector3df(<font color="#800080">0</font>,<font color="#800080">0</font>,<font color="#800080">0</font>),
133 video::SColorf(<font color="#800080">1.0f</font>, <font color="#800080">0.6f</font>, <font color="#800080">0.7f</font>, <font color="#800080">1.0f</font>), <font color="#800080">600.0f</font>); 133 video::SColorf(<font color="#800080">1.0f</font>, <font color="#800080">0.6f</font>, <font color="#800080">0.7f</font>, <font color="#800080">1.0f</font>), <font color="#800080">600.0f</font>);
134 scene::ISceneNodeAnimator* anim = <font color="#800080">0</font>; 134 scene::ISceneNodeAnimator* anim = <font color="#800080">0</font>;
135 anim = smgr-&gt;createFlyCircleAnimator (core::vector3df(<font color="#800080">0</font>,<font color="#800080">150</font>,<font color="#800080">0</font>),<font color="#800080">250.0f</font>); 135 anim = smgr-&gt;createFlyCircleAnimator (core::vector3df(<font color="#800080">0</font>,<font color="#800080">150</font>,<font color="#800080">0</font>),<font color="#800080">250.0f</font>);
136 node-&gt;addAnimator(anim); 136 node-&gt;addAnimator(anim);
137 anim-&gt;drop(); 137 anim-&gt;drop();
138 138
139 <font color="#0A246A"><i>// attach billboard to light 139 <font color="#0A246A"><i>// attach billboard to light
140 140
141</i></font> node = smgr-&gt;addBillboardSceneNode(node, core::dimension2d&lt;f32&gt;(<font color="#800080">50</font>, <font color="#800080">50</font>)); 141</i></font> node = smgr-&gt;addBillboardSceneNode(node, core::dimension2d&lt;f32&gt;(<font color="#800080">50</font>, <font color="#800080">50</font>));
142 node-&gt;setMaterialFlag(video::EMF_LIGHTING, <b>false</b>); 142 node-&gt;setMaterialFlag(video::EMF_LIGHTING, <b>false</b>);
143 node-&gt;setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR); 143 node-&gt;setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
144 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/particlewhite.bmp&quot;</font>)); 144 node-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/particlewhite.bmp&quot;</font>));
145 145
146</font></pre></td> 146</font></pre></td>
147 </tr> 147 </tr>
148 </table> 148 </table>
149 <p> The next special effect is a lot more interesting: A particle system. 149 <p> The next special effect is a lot more interesting: A particle system.
150 The particle system in the Irrlicht Engine is quit modular and extensible 150 The particle system in the Irrlicht Engine is quit modular and extensible
151 and yet easy to use. There is a particle system scene node into which 151 and yet easy to use. There is a particle system scene node into which
152 you can put particle emitters, which make particles come out of nothing. 152 you can put particle emitters, which make particles come out of nothing.
153 These emitters are quite flexible and usually have lots of parameters 153 These emitters are quite flexible and usually have lots of parameters
154 like direction, amount and color of the particles they should create.<br> 154 like direction, amount and color of the particles they should create.<br>
155 There are different emitters, for example a point emitter which lets 155 There are different emitters, for example a point emitter which lets
156 particles pop out at a fixed point. If the particle emitters available 156 particles pop out at a fixed point. If the particle emitters available
157 in the engine are not enough for you, you can easily create your own 157 in the engine are not enough for you, you can easily create your own
158 ones, you'll simply have to create a class derived from the IParticleEmitter 158 ones, you'll simply have to create a class derived from the IParticleEmitter
159 interface and attach it to the particle system using setEmitter().<br> 159 interface and attach it to the particle system using setEmitter().<br>
160 In this example we create a box particle emitter, which creates particles 160 In this example we create a box particle emitter, which creates particles
161 randomly inside a box. The parameters define the box, direction of 161 randomly inside a box. The parameters define the box, direction of
162 the particles, minimal and maximal new particles per second, color 162 the particles, minimal and maximal new particles per second, color
163 and minimal and maximal livetime of the particles.</p> 163 and minimal and maximal livetime of the particles.</p>
164 <p> Because only with emitters particle system would be a little bit 164 <p> Because only with emitters particle system would be a little bit
165 boring, there are particle affectors, which modify particles during 165 boring, there are particle affectors, which modify particles during
166 they fly around. They can be added to the particle system, simulating 166 they fly around. They can be added to the particle system, simulating
167 additional effects like gravity or wind. The particle affector we 167 additional effects like gravity or wind. The particle affector we
168 use in this example is an affector, which modifies the color of the 168 use in this example is an affector, which modifies the color of the
169 particles: It lets them fade out. Like the particle emitters, additional 169 particles: It lets them fade out. Like the particle emitters, additional
170 particle affectors can also be implemented by you, simply derive a 170 particle affectors can also be implemented by you, simply derive a
171 class from IParticleAffector and add it with addAffector(). After 171 class from IParticleAffector and add it with addAffector(). After
172 we set a nice material to the particle system, we have a cool looking 172 we set a nice material to the particle system, we have a cool looking
173 camp fire. By adjusting material, texture, particle emitter and affector 173 camp fire. By adjusting material, texture, particle emitter and affector
174 parameters, it is also easily possible to create smoke, rain, explosions, 174 parameters, it is also easily possible to create smoke, rain, explosions,
175 snow, and so on.<br> 175 snow, and so on.<br>
176 </p> 176 </p>
177 </div> 177 </div>
178 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 178 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
179 <tr> 179 <tr>
180 <td> <pre><font size="2"> scene::IParticleSystemSceneNode* ps = <font color="#800080">0</font>; 180 <td> <pre><font size="2"> scene::IParticleSystemSceneNode* ps = <font color="#800080">0</font>;
181 ps = smgr-&gt;addParticleSystemSceneNode(<b>false</b>); 181 ps = smgr-&gt;addParticleSystemSceneNode(<b>false</b>);
182 ps-&gt;setPosition(core::vector3df(-<font color="#800080">70</font>,<font color="#800080">60</font>,<font color="#800080">40</font>)); 182 ps-&gt;setPosition(core::vector3df(-<font color="#800080">70</font>,<font color="#800080">60</font>,<font color="#800080">40</font>));
183 ps-&gt;setScale(core::vector3df(<font color="#800080">2</font>,<font color="#800080">2</font>,<font color="#800080">2</font>)); 183 ps-&gt;setScale(core::vector3df(<font color="#800080">2</font>,<font color="#800080">2</font>,<font color="#800080">2</font>));
184 184
185 ps-&gt;setParticleSize(core::dimension2d&lt;f32&gt;(<font color="#800080">20.0f</font>, <font color="#800080">10.0f</font>)); 185 ps-&gt;setParticleSize(core::dimension2d&lt;f32&gt;(<font color="#800080">20.0f</font>, <font color="#800080">10.0f</font>));
186 186
187 scene::IParticleEmitter* em = ps-&gt;createBoxEmitter( 187 scene::IParticleEmitter* em = ps-&gt;createBoxEmitter(
188 core::aabbox3d&lt;f32&gt;(-<font color="#800080">7</font>,<font color="#800080">0</font>,-<font color="#800080">7</font>,<font color="#800080">7</font>,<font color="#800080">1</font>,<font color="#800080">7</font>), 188 core::aabbox3d&lt;f32&gt;(-<font color="#800080">7</font>,<font color="#800080">0</font>,-<font color="#800080">7</font>,<font color="#800080">7</font>,<font color="#800080">1</font>,<font color="#800080">7</font>),
189 core::vector3df(<font color="#800080">0.0f</font>,<font color="#800080">0.03f</font>,<font color="#800080">0.0f</font>), 189 core::vector3df(<font color="#800080">0.0f</font>,<font color="#800080">0.03f</font>,<font color="#800080">0.0f</font>),
190 <font color="#800080">80</font>,<font color="#800080">100</font>, 190 <font color="#800080">80</font>,<font color="#800080">100</font>,
191 video::SColor(<font color="#800080">0</font>,<font color="#800080">255</font>,<font color="#800080">255</font>,<font color="#800080">255</font>), video::SColor(<font color="#800080">0</font>,<font color="#800080">255</font>,<font color="#800080">255</font>,<font color="#800080">255</font>), 191 video::SColor(<font color="#800080">0</font>,<font color="#800080">255</font>,<font color="#800080">255</font>,<font color="#800080">255</font>), video::SColor(<font color="#800080">0</font>,<font color="#800080">255</font>,<font color="#800080">255</font>,<font color="#800080">255</font>),
192 <font color="#800080">800</font>,<font color="#800080">2000</font>); 192 <font color="#800080">800</font>,<font color="#800080">2000</font>);
193 193
194 ps-&gt;setEmitter(em); 194 ps-&gt;setEmitter(em);
195 em-&gt;drop(); 195 em-&gt;drop();
196 196
197 scene::IParticleAffector* paf = 197 scene::IParticleAffector* paf =
198 ps-&gt;createFadeOutParticleAffector(); 198 ps-&gt;createFadeOutParticleAffector();
199 199
200 ps-&gt;addAffector(paf); 200 ps-&gt;addAffector(paf);
201 paf-&gt;drop(); 201 paf-&gt;drop();
202 202
203 ps-&gt;setMaterialFlag(video::EMF_LIGHTING, <b>false</b>); 203 ps-&gt;setMaterialFlag(video::EMF_LIGHTING, <b>false</b>);
204 ps-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/particle.bmp&quot;</font>)); 204 ps-&gt;setMaterialTexture(<font color="#800080">0</font>, driver-&gt;getTexture(<font color="#FF0000">&quot;../../media/particle.bmp&quot;</font>));
205 ps-&gt;setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA)<font size="2">;</font></font></pre></td> 205 ps-&gt;setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA)<font size="2">;</font></font></pre></td>
206 </tr> 206 </tr>
207 </table> 207 </table>
208 <p> As our last special effect, we want a dynamic shadow be casted from 208 <p> As our last special effect, we want a dynamic shadow be casted from
209 an animated character. For this we load a DirectX .x model and place 209 an animated character. For this we load a DirectX .x model and place
210 it into our world. For creating the shadow, we simply need to call addShadowVolumeSceneNode(). 210 it into our world. For creating the shadow, we simply need to call addShadowVolumeSceneNode().
211 The color of shadows is only adjustable globally for all shadows, by 211 The color of shadows is only adjustable globally for all shadows, by
212 calling ISceneManager::setShadowColor(). Voila, here is our dynamic 212 calling ISceneManager::setShadowColor(). Voila, here is our dynamic
213 shadow.<br> 213 shadow.<br>
214 Because the character is a little bit too small for this scene, we make 214 Because the character is a little bit too small for this scene, we make
215 it bigger using setScale(). And because the character is lighted by 215 it bigger using setScale(). And because the character is lighted by
216 a dynamic light, we need to normalize the normals to make the lighting 216 a dynamic light, we need to normalize the normals to make the lighting
217 on it correct. This is always necessary if the scale of a dynamic lighted 217 on it correct. This is always necessary if the scale of a dynamic lighted
218 model is not (1,1,1). Otherwise it would get too dark or too bright 218 model is not (1,1,1). Otherwise it would get too dark or too bright
219 because the normals will be scaled too.</p> 219 because the normals will be scaled too.</p>
220 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 220 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
221 <tr> 221 <tr>
222 <td><pre><font size=2> mesh = smgr-&gt;getMesh(<font color="#FF0000">&quot;../../media/dwarf.x&quot;</font>); 222 <td><pre><font size=2> mesh = smgr-&gt;getMesh(<font color="#FF0000">&quot;../../media/dwarf.x&quot;</font>);
223 scene::IAnimatedMeshSceneNode* anode = <font color="#800080">0</font>; 223 scene::IAnimatedMeshSceneNode* anode = <font color="#800080">0</font>;
224 224
225 anode = smgr-&gt;addAnimatedMeshSceneNode(mesh); 225 anode = smgr-&gt;addAnimatedMeshSceneNode(mesh);
226 anode-&gt;setPosition(core::vector3df(-<font color="#800080">50</font>,<font color="#800080">20</font>,-<font color="#800080">60</font>)); 226 anode-&gt;setPosition(core::vector3df(-<font color="#800080">50</font>,<font color="#800080">20</font>,-<font color="#800080">60</font>));
227 anode-&gt;setAnimationSpeed(15); 227 anode-&gt;setAnimationSpeed(15);
228<font color="#0A246A"> 228<font color="#0A246A">
229 // add shadow</font> 229 // add shadow</font>
230 anode-&gt;addShadowVolumeSceneNode(); 230 anode-&gt;addShadowVolumeSceneNode();
231 smgr-&gt;setShadowColor(video::SColor(<font color="#800080">220</font>,<font color="#800080">0</font>,<font color="#800080">0</font>,<font color="#800080">0</font>)); 231 smgr-&gt;setShadowColor(video::SColor(<font color="#800080">220</font>,<font color="#800080">0</font>,<font color="#800080">0</font>,<font color="#800080">0</font>));
232</font><font size=2><font color="#0A246A"> 232</font><font size=2><font color="#0A246A">
233 // make the model a little bit bigger and normalize its normals <br> // because of this for correct lighting</font><br> anode-&gt;setScale(core::vector3df(2,2,2));<br> anode-&gt;setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);</font><font size=3 face="Courier New"><br></font></pre></td> 233 // make the model a little bit bigger and normalize its normals <br> // because of this for correct lighting</font><br> anode-&gt;setScale(core::vector3df(2,2,2));<br> anode-&gt;setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);</font><font size=3 face="Courier New"><br></font></pre></td>
234 </tr> 234 </tr>
235 </table> 235 </table>
236 <p> Finally we simply have to draw everything, that's all.</p> 236 <p> Finally we simply have to draw everything, that's all.</p>
237 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center"> 237 <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
238 <tr> 238 <tr>
239 <td><pre><font size=2> scene::ICameraSceneNode* camera = smgr-&gt;addCameraSceneNodeFPS(); 239 <td><pre><font size=2> scene::ICameraSceneNode* camera = smgr-&gt;addCameraSceneNodeFPS();
240 camera-&gt;setPosition(core::vector3df(-<font color="#800080">50</font>,<font color="#800080">50</font>,-<font color="#800080">150</font>)); 240 camera-&gt;setPosition(core::vector3df(-<font color="#800080">50</font>,<font color="#800080">50</font>,-<font color="#800080">150</font>));
241 241
242 242
243 <b>int </b>lastFPS = -<font color="#800080">1</font>; 243 <b>int </b>lastFPS = -<font color="#800080">1</font>;
244 244
245 <b>while</b>(device-&gt;run()) 245 <b>while</b>(device-&gt;run())
246 { 246 {
247 driver-&gt;beginScene(<b>true</b>, <b>true</b>, <font color="#800080">0</font>); 247 driver-&gt;beginScene(<b>true</b>, <b>true</b>, <font color="#800080">0</font>);
248 248
249 smgr-&gt;drawAll(); 249 smgr-&gt;drawAll();
250 250
251 driver-&gt;endScene(); 251 driver-&gt;endScene();
252 252
253 <b>int </b>fps = driver-&gt;getFPS(); 253 <b>int </b>fps = driver-&gt;getFPS();
254 254
255 <b>if </b>(lastFPS != fps) 255 <b>if </b>(lastFPS != fps)
256 { 256 {
257 core::stringw str = L&quot;Irrlicht Engine - SpecialFX example [&quot;;<br> str += driver-&gt;getName();<br> str += &quot;] FPS:&quot;;<br> str += fps;<br><br> device-&gt;setWindowCaption(str.c_str());<br> lastFPS = fps;<br> } 257 core::stringw str = L&quot;Irrlicht Engine - SpecialFX example [&quot;;<br> str += driver-&gt;getName();<br> str += &quot;] FPS:&quot;;<br> str += fps;<br><br> device-&gt;setWindowCaption(str.c_str());<br> lastFPS = fps;<br> }
258 } 258 }
259 259
260 device-&gt;drop(); 260 device-&gt;drop();
261 261
262 <b>return </b><font color="#800080">0</font>; 262 <b>return </b><font color="#800080">0</font>;
263} 263}
264 264
265</font> 265</font>
266</pre></td> 266</pre></td>
267 </tr> 267 </tr>
268 </table> 268 </table>
269 <p>&nbsp;</p> 269 <p>&nbsp;</p>
270 <p>&nbsp;</p> 270 <p>&nbsp;</p>
271 <p>&nbsp;</p> 271 <p>&nbsp;</p>
272 </div> 272 </div>
273 </td> 273 </td>
274 </tr> 274 </tr>
275</table> 275</table>
276<p>&nbsp;</p> 276<p>&nbsp;</p>
277 </body> 277 </body>
278</html> 278</html>