Guida [TUTORIAL] Irrlicht - Primo Approccio

Stato
Discussione chiusa ad ulteriori risposte.

ManHunter

Utente Jade
14 Settembre 2009
985
111
780
818
Ultima modifica da un moderatore:
Risultato finale:
001shot.jpg


Questo tutorial vi mostrerà come settare il vostro ambiente di sviluppo per utilizzare Irrlicht Engine e come scrivere un semplice programma base con esso. Verranno mostrate le basi del VideoDriver, del GUIEnvironment e dello SceneManager.
L'IDE utilizzato per il tutorial è Microsoft Visual Studio, ma voi potrete utilizzare quello che preferite, a patto che riusciate a settarlo correttamente.

Potete scaricare Irrlicht Engine SDK 1.7.2 da qui: Irrlicht Engine - A free open source 3d engine

Per utilizzare correttamente Irrlicht Engine, dovrete includere ai vostri programmi l'header file <irrlicht.h>. Esso può essere trovato nella cartella "include" della directory di estrazione di Irrlicht. Per far sì che il compilatore possa trovare questo file, la cartella "include" di Irrlicht andrà inserita tra le "include directories" dell'IDE che state utilizzando. Inoltre, avremo anche bisogno del file "irrlicht.lib" che andrà selezionato nelle "lib directories" del vostro IDE.

Finite tali operazioni, il vostro IDE sarà settato correttamente. Potrete ora sviluppare applicazioni con Irrlicht Engine.
Iniziamo!
Dopo aver settato l'IDE, il compilatore saprà dove cercare gli header file di Irrlicht, quindi possiamo iniziare ad includere:
PHP:
#include <irrlicht.h>
In Irrlicht tutto può essere trovato sotto il namespace "irr", quindi se vorrete usare una classe dell'engine dovrete scrivere "irr::" prima del nome della classe. Per risparmiare tempo, possiamo dire al compilatore che namespace vogliamo utilizzare, così da non scrivere "irr::" dappertutto. Scriveremo:
PHP:
using namespace irr;
Esistono anche altri namespace in Irrlicht, ma non li useremo per questo esempio. Potete trovare una documentazione qui: Irrlicht Engine: Namespace Index. I namespaces sono:
PHP:
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
Per utilizzare la libreria dinamica Irrlicht.dll, abbiamo bisogno di linkarla al nostro programma. Come già detto, possiamo farla richiamare automaticamente al compilatore impostandola nelle sue opzioni oppure richiamarla all'interno del programma con:
PHP:
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#endif
Questo, invece, è il metodo main(), il metodo principale dal quale il programma inizia:
PHP:
int main()
{
La funzione più importante dell'engine è la createDevice(). Essa crea l'IrrlichtDevice, un oggetto che ci permette di fare tutto con l'engine. Essa ha sette parametri:
  • deviceType: tipo del device. Può essere EDT_SOFTWARE, EDT_BURNINGSVIDEO, EDT_NULL, EDT_DIRECT3D8, EDT_DIRECT3D9 o EDT_OPENGL.
  • windowSize: dimensione della finestra o risoluzione dello schermo nella modalità Full Screen.
  • bits: quantità dei colori per pixel. Può essere 16 o 32.
  • fullscreen: specifica se la finestra verrà aperta in full screen o no.
  • stencilbuffer: specifica se vogliamo usare lo stencil buffer, per disegnare le ombre.
  • vsync: specifica se vogliamo utilizzare la sincronia verticale, solo in FullScreenMode.
  • eventReceiver: un oggetto che riceve eventi. Non useremo questo parametro, settandolo a 0.
Creiamo la IrrlichtDevice e controlliamo se essa è valida:
PHP:
IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640,480), 16, false, false, false, 0);

if( !device )
   return 1;
Impostiamo il titolo della finestra:
PHP:
device->setWindowCaption( L"Prima prova con Irrlicht Engine!" );
Definiamo dei puntatori al VideoDriver, al GUIEnvironment e allo SceneManager:
PHP:
IVideoDriver *driver = device->getVideoDriver();
ISceneManager *smgr = device->getSceneManager();
IGUIEnvironment *guienv = device->getGUIEnvironment();
Aggiungiamo un'etichetta contenente del testo utilizzando il GUIEnvironment. Il testo sarà posizionato a (10,10) per l'angolo in altro a sinistra e (260,22) per l'angolo in basso a destra:
PHP:
guienv->addStaticText( L"Primo programma con Irrlicht Engine", rect<s32>(10,10,260,22), true );
Per mostrare qualcosa di interessante, caricheremo un modello di Quake 2. Prenderemo la mesh dallo SceneManager con il metodo getMEsh() e aggiungeremo uno SceneNode per visualizzare la mesh con la sua animazione con addAnimatedMeshSceneNode(). Possiamo caricare mesh per qualsiasi formato supportato dall'engine. Possiamo anche caricare mappe per Quake 3 (.bsp).
PHP:
IAnimatedMesh *mesh = smgr->getMesh( "../../media/sydney.md2" );

if( !mesh )
{
   device->drop();
   return 1;
}
IAnimatedMeshSceneNode *node = smgr->addAnimatedMeshSceneNode( mesh );
La mesh in questo modo è caricata. Ora, però, abbelliremo il modello. Disabilitermo le luci, perché non abbiamo luci dinamiche nella scena, utilizzeremo un'animazione predefinita e applicheremo una texture al modello:
PHP:
if( node )
{
   node->setMaterialFlag( EMF_LIGHTING, false );
   node->setMD2Animation( scene::EMAT_STAND );
   node->setMaterialTexture( 0, driver->getTexture( "../../media(sydney.bmp" ) );
}
Per visualizzare la mesh finita, piazzeremo una visuale alla posizione (0,30,-40). La visuale guarderà da questa posizione a (0,5,0):
PHP:
smgr->addCameraSceneNode( 0, vector3df( 0,30,-40 ), vector3df( 0,5,0 ) );
Ok, ora dobbiamo settare la scena e disegnare il tutto. Faremo partire la device in un loop che terminerà solo quando l'utente terminerà la finestra di esecuzione del programma:
PHP:
while( device->run() )
{
   driver->beginScene( true, true, SColor( 255,100,101,140 ) );

   smgr->drawAll();
   guienv->drawAll();

   driver->endScene();
}
Dopo aver finito con il render loop, dobbiamo cancellare la device creata con createDevice():
PHP:
device->drop();
return 0;
}
E' tutto, compilate e lanciate il programma per visualizzare cosa avete creato.

La guida è stata tradotta da me, l'originale è in lingua inglese e potete trovarla qui: Sito ufficiale Irrlicht

Saluti.
 
Stato
Discussione chiusa ad ulteriori risposte.