GLES drivers adapted, but only did make compile-tests. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
		
			
				
	
	
		
			395 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			395 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <html>
 | |
| <head>
 | |
| <title>Irrlicht Engine Tutorial</title>
 | |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | |
| </head>
 | |
| 
 | |
| <body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
 | |
| <br>
 | |
| <table width="90%" border="0" cellspacing="0" cellpadding="2" align="center">
 | |
|               <tr> 
 | |
|                 <td bgcolor="#666699"> <b><font color="#FFFFFF">Tutorial 1.HelloWorld</font></b></td>
 | |
| 
 | |
|               </tr>
 | |
|               <tr> 
 | |
|                 <td height="90" bgcolor="#F7F3F7"> <div align="left"> 
 | |
|                     <p>This Tutorial shows how to set up the IDE for using the 
 | |
|                       Irrlicht Engine and how to write a simple HelloWorld program 
 | |
|                       with it. The program will show how to use the basics of 
 | |
|                       the VideoDriver, the GUIEnvironment and the SceneManager.<br>
 | |
|                       The result of this example will look like this:</p>
 | |
|                     <p align="center"><img src="../../media/001shot.jpg" width="259" height="204"><br>
 | |
|                     </p>
 | |
|                   </div></td>
 | |
| 
 | |
|               </tr>
 | |
|             </table>
 | |
|             <br> <table width="90%" border="0" cellspacing="0" cellpadding="2" align="center">
 | |
|               <tr> <a name="settingup"></a>
 | |
|                 <td bgcolor="#666699"> <b><font color="#FFFFFF">Setting up the 
 | |
|                   IDE</font></b></td>
 | |
|               </tr>
 | |
|               <tr> 
 | |
|                 <td height="90" bgcolor="#F7F3F7"> <div align="left"> 
 | |
|                     <div align="left"> 
 | |
|                       <p align="left">To use the engine, we will have to include 
 | |
|                         the header file <irrlicht.h>, which can be found 
 | |
|                         in the Irrlicht Engine SDK directory \include. To let 
 | |
|                         the compiler find this header file, the directory where 
 | |
|                         it is located should be specified somewhere. This is different 
 | |
|                         for every IDE and compiler. I will explain how to do this 
 | |
|                         in Microsoft Visual Studio C++ 6.0 and .NET:</p>
 | |
| 
 | |
|                     </div>
 | |
|                     <ul>
 | |
|                       <li> 
 | |
|                         <div align="left">If you use Version 6.0, select the Menu 
 | |
|                           Extras -> Options. Select the directories tab, and 
 | |
|                           select the 'Include' Item in the combo box. Add the 
 | |
|                           \include directory of the Irrlicht Engine folder to 
 | |
|                           the list of directories. Now the compiler will find 
 | |
|                           the Irrlicht.h header file. We also need the location 
 | |
|                           of irrlicht.lib to be listed, so select the 'Libraries' 
 | |
|                           tab and add the \lib\VisualStudio directory.<br>
 | |
|                           <br>
 | |
|                           <img src="../../media/vc6optionsdir.jpg" width="231" height="172" align="middle">  <img src="../../media/vc6include.jpg" width="231" height="159" align="middle"><br>
 | |
|                             <br>
 | |
| 
 | |
|                         </div>
 | |
|                       </li>
 | |
|                       <li>If your IDE is Visual Studio .NET, select Tools -> 
 | |
|                         Options. Select the Projects entry and then select VC++ 
 | |
|                         directories. Select 'show directories for include files' 
 | |
|                         in the combo box, and add the \include directory of the 
 | |
|                         Irrlicht Engine folder to the list of directories so the 
 | |
|                         compiler will find the Irrlicht.h header file. We also 
 | |
|                         need the irrlicht.lib to be found, so select 'show directories 
 | |
|                         for Library files' and add the \lib\VisualStudio directory.<br>
 | |
|                         <br>
 | |
|                         <img src="../../media/vcnetinclude.jpg" width="256" height="160"> 
 | |
|                         <br>
 | |
|                       </li>
 | |
|                     </ul>
 | |
| 
 | |
|                     <p> </p>
 | |
|                   </div></td>
 | |
|               </tr>
 | |
|             </table>
 | |
|             <br> <table width="90%" border="0" cellspacing="0" cellpadding="2" align="center">
 | |
|               <tr> 
 | |
|                 <td bgcolor="#666699"> <font color="#FFFFFF"><b>Lets start!</b></font></td>
 | |
|               </tr>
 | |
| 
 | |
|               <tr> 
 | |
|                 <td height="90" bgcolor="#F7F3F7" valign="top"> <div align="left"> 
 | |
|                     <div align="left"> 
 | |
|                       <div align="left"> 
 | |
|                         <div align="left"> 
 | |
|                           <p>After we have set up the IDE, the compiler will know 
 | |
|                             where to find the Irrlicht Engine header files so 
 | |
|                             we can include it now into our code.</p>
 | |
|                           <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                             <tr> 
 | |
|                               <td> <pre>#include <irrlicht.h></pre> </td>
 | |
| 
 | |
|                             </tr>
 | |
|                           </table>
 | |
|                           <p>In the Irrlicht Engine, everything can be found in 
 | |
|                             the namespace 'irr'. So if you want to use a class 
 | |
|                             of the engine, you'll have to type an irr:: before 
 | |
|                             the name of the class. For example, to use the IrrlichtDevice, 
 | |
|                             write: irr::IrrlichtDevice. To avoid having to put 
 | |
|                             irr:: before of the name of every class, we tell the 
 | |
|                             compiler that we use that namespace.</p>
 | |
|                           <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                             <tr> 
 | |
|                               <td> <pre>using namespace irr;</pre> </td>
 | |
|                             </tr>
 | |
| 
 | |
|                           </table>
 | |
|                           <p>There are 5 sub-namespaces in the Irrlicht Engine. 
 | |
|                             Take a look at them: you can read a detailed description 
 | |
|                             of them in the documentation by clicking on the top 
 | |
|                             menu item '<a href="http://irrlicht.sourceforge.net/docu/namespaces.html">Namespace 
 | |
|                             List</a>'. To keep this example simple, we don't want 
 | |
|                             to have to specify the name spaces, Hence:</p>
 | |
|                           <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                             <tr> 
 | |
|                               <td> <pre>using namespace core;<br>using namespace scene;<br>using namespace video;<br>using namespace io;<br>using namespace gui;</pre> </td>
 | |
| 
 | |
|                             </tr>
 | |
|                           </table>
 | |
|                           <p>To be able to use the Irrlicht.DLL file, we need 
 | |
|                             to link with the Irrlicht.lib. We could set this option 
 | |
|                             in the project settings, but to make it easy we use 
 | |
|                             a pragma comment:</p>
 | |
|                           <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                             <tr> 
 | |
|                               <td> <pre>#pragma comment(lib, "Irrlicht.lib")</pre> </td>
 | |
| 
 | |
|                             </tr>
 | |
|                           </table>
 | |
|                           <p>Now the main method: to keep this example simple 
 | |
|                             we use int main(), which can be used on any platform. 
 | |
|                             However, on Windows platforms, we could also use the 
 | |
|                             WinMain method if we would want to get rid of the 
 | |
|                             console window which pops up when starting a program 
 | |
|                             with main().</p>
 | |
|                           <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                             <tr> 
 | |
|                               <td> <pre>int main()<br>{</pre> </td>
 | |
|                             </tr>
 | |
| 
 | |
|                           </table>
 | |
|                           <p>The most important function of the engine is the 
 | |
|                             'createDevice' function. The Irrlicht Device, which 
 | |
|                             is the root object for doing everything with the engine, 
 | |
|                             can be created with it. createDevice() has 7 parameters:</p>
 | |
|                         </div>
 | |
|                         <ul>
 | |
|                           <li> 
 | |
|                             
 | |
|                 <div align="left"> deviceType: Type of the device. This can currently 
 | |
|                   be the Null device, the Software device, Direct3D8, Direct3D9, 
 | |
|                   or OpenGL. In this example we use EDT_SOFTWARE, but, to try 
 | |
|                   them out, you might want to change it to EDT_NULL, EDT_DIRECT3D8, 
 | |
|                   EDT_DIRECT3D9 or EDT_OPENGL. </div>
 | |
|                           </li>
 | |
|                           <li> 
 | |
|                             <div align="left">windowSize: Size of the window or 
 | |
|                               full screen mode to be created. In this example 
 | |
|                               we use 512x384.</div>
 | |
| 
 | |
|                           </li>
 | |
|                           <li> 
 | |
|                             <div align="left">bits: Number of bits per pixel when 
 | |
|                               in full screen mode. This should be 16 or 32. This 
 | |
|                               parameter is ignored when running in windowed mode.</div>
 | |
|                           </li>
 | |
|                           <li> 
 | |
|                             <div align="left">fullscreen: Specifies if we want 
 | |
|                               the device to run in full screen mode or not.</div>
 | |
|                           </li>
 | |
|                           <li>stencilbuffer: Specifies if we want to use the stencil 
 | |
|                             buffer for drawing shadows.</li>
 | |
| 
 | |
|                           <li>vsync: Specifies if we want to have vsync enabled. 
 | |
|                             This is only useful in full screen mode.</li>
 | |
|                           <li> 
 | |
|                             <div align="left">eventReceiver: An object to receive 
 | |
|                               events. We do not want to use this parameter here, 
 | |
|                               and set it to 0.</div>
 | |
|                           </li>
 | |
|                         </ul>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>IrrlichtDevice *device =<br>		createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,<br>			false, false, false, 0);</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>Now we set the caption of the window to some nice text. 
 | |
|                           Note that there is a 'L' in front of the string: the 
 | |
|                           Irrlicht Engine uses wide character strings when displaying 
 | |
|                           text.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>Now we store a pointer to the video driver, the SceneManager, 
 | |
|                           and the graphical user interface environment so that 
 | |
|                           we do not always have to write device->getVideoDriver(), 
 | |
|                           device->getSceneManager(), and device->getGUIEnvironment().</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>IVideoDriver* driver = device->getVideoDriver();<br>ISceneManager* smgr = device->getSceneManager();<br>IGUIEnvironment* guienv = device->getGUIEnvironment();</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p> We add a hello world label to the window using the 
 | |
|                           GUI environment. The text is placed at the position 
 | |
|                           (10,10) as top left corner and (200,22) as lower right 
 | |
|                           corner.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",<br>	 rect<s32>(10,10,200,22), true);</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>To display something interesting, we load a Quake 2 
 | |
|                           model and display it. We only have to get the Mesh from 
 | |
|                           the Scene Manager with getMesh() and add a SceneNode 
 | |
|                           to display the mesh with addAnimatedMeshSceneNode(). 
 | |
|                           Instead of loading a Quake2 file (.md2), it is also 
 | |
|                           possible to load a Maya object file (.obj), a complete 
 | |
|                           Quake3 map (.bsp), or a Milshape file (.ms3d).<br>
 | |
|                           By the way, that cool Quake 2 model called sydney.md2 
 | |
|                           was modelled by Brian Collins.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");<br>IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>To make the mesh look a little bit nicer, we change 
 | |
|                           its material a little bit: we disable lighting because 
 | |
|                           we do not have a dynamic light in here and the mesh 
 | |
|                           would be totally black. Then we set the frame loop so 
 | |
|                           that the animation is looped between the frames 0 and 
 | |
|                           310. Then, at last, we apply a texture to the mesh. 
 | |
|                           Without it the mesh would be drawn using only a solid 
 | |
|                           color.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>if (node)<br>{<br>	node->setMaterialFlag(EMF_LIGHTING, false);<br>	node->setFrameLoop(0, 310);	<br>	node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );<br>}</pre> 
 | |
|                             </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>To look at the mesh, we place a camera into 3d space 
 | |
|                           at the position (0, 10, -40). The camera looks from 
 | |
|                           there to (0,5,0).</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));</pre> </td>
 | |
|                           </tr>
 | |
| 
 | |
|                         </table>
 | |
|                         <p>Ok. Now that we have set up the scene, let's draw everything: 
 | |
|                           we run the device in a while() loop until the device 
 | |
|                           does not want to run any more. This would be when the 
 | |
|                           user closes the window or presses ALT+F4 in Windows.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>while(device->run())<br>{</pre> </td>
 | |
|                           </tr>
 | |
| 
 | |
|                         </table>
 | |
|                         <p> Everything must be drawn between a beginScene() and 
 | |
|                           an endScene() call. The beginScene clears the screen 
 | |
|                           with a color and also the depth buffer, if desired. 
 | |
|                           Then we let the Scene Manager and the GUI environment 
 | |
|                           draw their content. With the endScene() call, everything 
 | |
|                           is presented on the screen.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             
 | |
|                 <td> <pre>	driver->beginScene(true, true, SColor(255,100,101,140));<br>
 | |
| 	smgr->drawAll();
 | |
| 	guienv->drawAll();</pre> 
 | |
|                   <pre>	driver->endScene();
 | |
| }</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>After we are finished, we have to delete the Irrlicht 
 | |
|                           Device created earlier with createDevice(). With the 
 | |
|                           Irrlicht Engine, you should delete all objects you created 
 | |
|                           with a method or function that starts with 'create'. 
 | |
|                           The object is deleted simply by calling ->drop(). 
 | |
|                           See the <a href="http://irrlicht.sourceforge.net/docu/classirr_1_1IUnknown.html#a3" target="_blank">documentation</a> 
 | |
|                           for more information.</p>
 | |
|                         <table width="95%" border="0" cellspacing="2" cellpadding="0" bgcolor="#CCCCCC" align="center">
 | |
|                           <tr> 
 | |
|                             <td> <pre>	device->drop();<br> return 0;
 | |
| }</pre> </td>
 | |
| 
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>That's it. Compile and run. </p>
 | |
|                         <p> </p>
 | |
|                       </div>
 | |
|                     </div>
 | |
|                   </div></td>
 | |
|               </tr>
 | |
| 
 | |
|             </table>
 | |
|             <br>
 | |
|             <table width="90%" border="0" cellspacing="0" cellpadding="2" align="center">
 | |
|               <tr> 
 | |
|                 <td bgcolor="#666699"> <b><font color="#FFFFFF">Possible Errors 
 | |
|                   or Problems</font></b></td>
 | |
|               </tr>
 | |
|               <tr> 
 | |
|                 <td height="90" bgcolor="#F7F3F7"> <div align="left"> 
 | |
|                     <div align="left"> 
 | |
|                       <div align="left"> 
 | |
|                         <p><strong>Visual Studio</strong><br>
 | |
| 
 | |
|                           While trying to compile the tutorial, if you get the 
 | |
|                           error: </p>
 | |
|                         <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
 | |
|                           <tr> 
 | |
|                             <td bgcolor="#CCCCCC"><font face="Courier New, Courier, mono">fatal 
 | |
|                               error C1083: Cannot open include file: 'irrlicht.h': 
 | |
|                               No such file or directory</font></td>
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p>Solution: You may have set the include directory improperly 
 | |
|                           in the Visual Studio options. See <a href="#settingup">above</a> 
 | |
|                           for information on setting it. </p>
 | |
| 
 | |
|                         <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
 | |
|                           <tr> 
 | |
|                             <td bgcolor="#CCCCCC"><font face="Courier New, Courier, mono">LINK 
 | |
|                               : LNK6004: HelloWorld.exe not found or not built 
 | |
|                               by the last incremental link; performing full link<br>
 | |
|                               LINK : fatal error LNK1104: cannot open file "Irrlicht.lib"<br>
 | |
|                               Error executing link.exe</font></td>
 | |
|                           </tr>
 | |
|                         </table>
 | |
|                         <p> Solution: You may have set the library directory improperly. 
 | |
|                           See <a href="#settingup">above</a> for information on 
 | |
|                           setting it. <br>
 | |
| 
 | |
|                           <br>
 | |
|                         </p>
 | |
|                         <p><strong>Compiler independent problems<br>
 | |
|                           </strong>If the tutorial compiles successfully but gives 
 | |
|                           the error: </p>
 | |
|                         <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
 | |
|                           <tr> 
 | |
|                             <td bgcolor="#CCCCCC"><font face="Courier New, Courier, mono">This 
 | |
|                               application has failed to start because Irrlicht.dll 
 | |
|                               was not found. Re-installing the application may 
 | |
|                               fix this problem</font></td>
 | |
|                           </tr>
 | |
| 
 | |
|                         </table>
 | |
|                         <p>Solution: You may have forgotten to copy the Irrlicht.dll 
 | |
|                           file from Irrlicht\bin\VisualStudio to the directory 
 | |
|                           the tutorial's project file is in. </p>
 | |
|                         If the tutorial compiles and runs successfully but produces 
 | |
|                         errors in the console like:<br>
 | |
|                         <br>
 | |
|                         <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
 | |
|                           <tr> 
 | |
|                             <td bgcolor="#CCCCCC"><font face="Courier New, Courier, mono">Could 
 | |
|                               not load mesh, because file could not be opened.: 
 | |
|                               ../media/sydney.md2</font></td>
 | |
|                           </tr>
 | |
| 
 | |
|                         </table>
 | |
|                         <p> Or:</p>
 | |
|                         <table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
 | |
|                           <tr> 
 | |
|                             <td bgcolor="#CCCCCC"><em><font face="Courier New, Courier, mono">Could 
 | |
|                               not open file of texture: stones.jpg</font></em><font face="Courier New, Courier, mono"><b><br>
 | |
|                               </b><em>Could not load texture: stones.jpg </em></font></td>
 | |
|                           </tr>
 | |
| 
 | |
|                         </table>
 | |
|                         <p>Solution: The file listed in the error message cannot 
 | |
|                           be found. Ensure that the directory specified in the 
 | |
|                           main.cpp exists and is where the file is located. <br>
 | |
|                         </p>
 | |
|                       </div>
 | |
|                     </div>
 | |
|                   </div></td>
 | |
|               </tr>
 | |
|             </table> 
 | |
| <p> </p>
 | |
| </body>
 | |
| </html>
 |