{"id":894,"date":"2015-03-01T09:31:57","date_gmt":"2015-03-01T09:31:57","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=894"},"modified":"2016-05-30T05:12:41","modified_gmt":"2016-05-30T05:12:41","slug":"introduction-au-moteur-3d-irrlicht","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=894","title":{"rendered":"Introduction au moteur 3D Irrlicht &#8211; partie 1"},"content":{"rendered":"<p>I<strong><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/073.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-906\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/073.jpg\" alt=\"073\" width=\"375\" height=\"291\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/073.jpg 806w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/073-300x233.jpg 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/03\/073-624x484.jpg 624w\" sizes=\"(max-width: 375px) 100vw, 375px\" \/><\/a><\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p><strong>Irrlicht 3D<\/strong> est un moteur 3D <strong>gratuit<\/strong> et <strong>open-source<\/strong> \u00e9crit en C++.<br \/>\nSon utilisation est facilit\u00e9 par le petit nombre de m\u00e9thodes (fonctions) qu&rsquo;il poss\u00e8de par rapport \u00e0 Ogre3D qui quant \u00e0 lui comporte beaucoup plus de fonctions. Irrlicht 3D est donc plut\u00f4t simple \u00e0 utiliser.<\/p>\n<p>Il g\u00e8re aussi bien les APIs DirectX que OpenGL. Il peut \u00eatre aussi utilis\u00e9 sur Linux, Windows et OS X.<\/p>\n<p>Version d&rsquo;Irrlicht 3D utilis\u00e9e : 1.8.1<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>&#8211; Savoir lire les <em>rudiments d&rsquo;un programme C++<\/em> (pointeur, classe, etc&#8230;)<br \/>\n&#8211; Savoir configurer <em>Visual Studio C++ Express<\/em> (voir cet article)<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>Il vous faut comprendre comment configurer les r\u00e9pertoires de d\u00e9pendance dans Visual C++.<\/p>\n<p>T\u00e9l\u00e9charger Irrlicht :<\/p>\n<p><a href=\"http:\/\/irrlicht.sourceforge.net\/downloads.html\">http:\/\/irrlicht.sourceforge.net\/downloads.html<\/a><\/p>\n<p>Ce qu&rsquo;il y a dans le repertoire extrait :<\/p>\n<p><strong>bin<\/strong> : les biblioth\u00e8ques dynamiques et les binaires des exemples du SDK<\/p>\n<p><strong>include<\/strong> : les principaux headers du code source<\/p>\n<p><strong>lib<\/strong> : les biblioth\u00e8ques statiques<\/p>\n<p><strong>Ce qu&rsquo;il faut faire :<\/strong><\/p>\n<p>Dans le r\u00e9pertoire bin extrait : il vous suffit de choisir le dossier correspondant \u00e0 votre configuration et de copier le fichier .dll quelque part.<br \/>\nVous devrez le mettre dans le m\u00eame dossier que vos fichiers ex\u00e9cutables (.exe) pour que ceux-ci fonctionnent.<\/p>\n<p>Il faut configurer votre IDE (en l&rsquo;occurence Visual Studio C++)<br \/>\nen param\u00e9trant les dossiers include \/ et lib (suivre ce tutoriel pour le configurer [config_vc++]<\/p>\n<p>Mettre dans votre fichier .cpp principal :<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<p><strong>Exemple complet :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n \/\/ D\u00e9finition de la biblioth\u00e8que \r\nIrrlicht.lib#pragma comment(lib, &quot;Irrlicht.lib&quot;)\r\n\r\n \/\/ D\u00e9claration du fichier d'en-t\u00eate d'Irrlicht\r\n#include &lt;irrlicht.h&gt;\r\n\r\n\/\/ D\u00e9claration du namespace (espace de nom) d'Irrlicht\r\nusing namespace irr; \r\n\r\nint main()\r\n{\r\n\u00a0\u00a0 \u00a0\/\/ Cr\u00e9\u00e9e le device qui va g\u00e9rer le moteur 3D\r\n\u00a0\u00a0 \u00a0IrrlichtDevice* device = createDevice(video::EDT_DIRECT3D8,\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0core::dimension2d&lt;u32&gt;(640,480));\r\n\r\n    \/\/ Syst\u00e8me qui permet d'afficher du rendu \u00e0 l'\u00e9cran\r\n\u00a0\u00a0 \u00a0video::IVideoDriver* driver = device-&gt;getVideoDriver();\r\n\u00a0\u00a0 \u00a0scene::ISceneManager* scenemgr = device-&gt;getSceneManager();\r\n\r\n    \/\/ On sp\u00e9cifie le titre de la fen\u00eatre\r\n\u00a0\u00a0 \u00a0device-&gt;setWindowCaption(L&quot;Hello World!&quot;);\r\n\r\n\u00a0\u00a0 \u00a0\/\/ On charge un fichier mod\u00e8le .md2\r\n\u00a0\u00a0 \u00a0scene::ISceneNode* node = scenemgr-&gt;addAnimatedMeshSceneNode(\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0scenemgr-&gt;getMesh(&quot;quake2model.md2&quot;));\r\n\r\n\u00a0\u00a0 \u00a0\/\/ On ajoute \u00e0 ce mod\u00e8le, une texture et on d\u00e9sactive les lumi\u00e8res\r\n\u00a0\u00a0 \u00a0if (node)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0node-&gt;setMaterialTexture(0, driver-&gt;getTexture(&quot;texture.bmp&quot;));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0node-&gt;setMaterialFlag(video::EMF_LIGHTING, false);\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\/\/ On ajoute une cam\u00e9ra de type FPS (Vue \u00e0 la premi\u00e8re personne)\r\n\u00a0\u00a0 \u00a0scenemgr-&gt;addCameraSceneNodeFPS();\r\n\r\n\u00a0\u00a0 \u00a0\/\/ On affiche le rendu !\r\n\u00a0\u00a0 \u00a0while (device-&gt;run() &amp;&amp; driver)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0driver-&gt;beginScene(true, true, video::SColor(255,0,0,255));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0scenemgr-&gt;drawAll();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0driver-&gt;endScene();\r\n\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\/\/ On efface le device\r\n\u00a0\u00a0 \u00a0device-&gt;drop();\r\n\u00a0\u00a0 \u00a0return 0;\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong><br \/>\nFonction createDevice (&#8230;) :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\r\nirr::IrrlichtDevice* device =\r\n             irr::createDevice(irr::video::EDT_OPENGL,\r\n             irr::core::dimension2d&lt;irr::u32&gt;(800,600),\r\n             32, false, true, false, 0);\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Explication du bout de code :<\/strong><\/p>\n<p>Les arguments pass\u00e9s en param\u00e8tre sont dans l&rsquo;ordre :<\/p>\n<p>&#8211; <strong>device\u00a0<\/strong> : c&rsquo;est un pointeur sur l&rsquo;objet return\u00e9 par irr:createDevice(&#8230;)<\/p>\n<p>&#8211; <strong>deviceType<\/strong> : d\u00e9signe l&rsquo;API graphique avec laquelle va s&rsquo;interfacer Irrlicht. Nous utiliserons OpenGL tout au long du tutoriel, mais on peut aussi choisir Direct3D par exemple en mettant la valeur EDT_DIRECT3D9.<\/p>\n<p>&#8211; <strong>windowSize<\/strong> : la taille de la fen\u00eatre. Tout est dit ! Avec le code indiqu\u00e9 plus haut, on cr\u00e9e une<br \/>\nfen\u00eatre de 800 par 600 pixels.<\/p>\n<p>&#8211; <strong>bits<\/strong> : d\u00e9termine le nombre de bits par pixels.<\/p>\n<p>&#8211; <strong>fullscreen<\/strong> : un bool\u00e9en qui indique si on veut faire du plein \u00e9cran ou pas. Pour la valeur true l&rsquo;application<br \/>\nsera en plein \u00e9cran, et pour false la fen\u00eatre sera de la taille d\u00e9finie plus haut.<\/p>\n<p>&#8211;<strong> stencilbuffer<\/strong> : un autre bool\u00e9en qui indique lui si on active le stencil buffer ou pas. Il est actif pour true.<\/p>\n<p>&#8211;<strong> vsync<\/strong> : toujours un bool\u00e9en. Celui-ci sert \u00e0 activer la synchronisation verticale. Pas de myst\u00e8re, elle est active pour true.<\/p>\n<p>&#8211; <strong>receiver<\/strong> : permet d&rsquo;associer un capteur d&rsquo;\u00e9v\u00e9nements au device (0 signifie qu&rsquo;on n&rsquo;associe rien). Nous verrons de quoi il s&rsquo;agit dans un prochain chapitre.<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Dans cette premi\u00e8re partie nous avons appris comment <strong>se servir<\/strong> de Irrlicht 3D.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>&#8211; http:\/\/irrlicht.sourceforge.net\/features\/<br \/>\n&#8211; http:\/\/openclassrooms.com\/courses\/3d-temps-reel-avec-irrlicht<br \/>\n&#8211; http:\/\/irrlicht.sourceforge.net\/docu\/example001.html<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I &nbsp; Intro : Irrlicht 3D est un moteur 3D gratuit et open-source \u00e9crit en C++. Son utilisation est facilit\u00e9 par le petit nombre de m\u00e9thodes (fonctions) qu&rsquo;il poss\u00e8de par rapport \u00e0 Ogre3D qui quant \u00e0 lui comporte beaucoup plus de fonctions. Irrlicht 3D est donc plut\u00f4t simple \u00e0 utiliser. Il g\u00e8re aussi bien les [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/894"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=894"}],"version-history":[{"count":40,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/894\/revisions"}],"predecessor-version":[{"id":4998,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/894\/revisions\/4998"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}