• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 1 voto(i) - 5 media
  • 1
  • 2
  • 3
  • 4
  • 5
[TUTORIAL] Irrlicht - Primo Approccio
#1
Risultato finale:
[Immagine: 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:
Codice 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:
Codice 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:
Codice 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:
Codice PHP:
#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#endif 
Questo, invece, è il metodo main(), il metodo principale dal quale il programma inizia:
Codice 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:
Codice PHP:
IrrlichtDevice *device createDevicevideo::EDT_SOFTWAREdimension2d<u32>(640,480), 16falsefalsefalse0);

if( !
device )
   return 
1
Impostiamo il titolo della finestra:
Codice PHP:
device->setWindowCaptionL"Prima prova con Irrlicht Engine!" ); 
Definiamo dei puntatori al VideoDriver, al GUIEnvironment e allo SceneManager:
Codice 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:
Codice PHP:
guienv->addStaticTextL"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).
Codice PHP:
IAnimatedMesh *mesh smgr->getMesh"../../media/sydney.md2" );

if( !
mesh )
{
   
device->drop();
   return 
1;
}
IAnimatedMeshSceneNode *node smgr->addAnimatedMeshSceneNodemesh ); 
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:
Codice PHP:
if( node )
{
   
node->setMaterialFlagEMF_LIGHTINGfalse );
   
node->setMD2Animationscene::EMAT_STAND );
   
node->setMaterialTexture0driver->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):
Codice PHP:
smgr->addCameraSceneNode0vector3df0,30,-40 ), vector3df0,5,) ); 
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:
Codice PHP:
while( device->run() )
{
   
driver->beginScenetruetrueSColor255,100,101,140 ) );

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

   
driver->endScene();

Dopo aver finito con il render loop, dobbiamo cancellare la device creata con createDevice():
Codice 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.
 
Rispondi
#2
Bel tutorial, grazie del contributo Smile
 
Rispondi
#3
Codice:
#include <irrlicht.h>
using namespace irr;
#include <iostream>
using namespace std;

#ifdef _IRR_WINDOWS_
#pragma comment(lib, "Irrlicht.lib")
#endif

int main ()
{
IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<u32>(640,480), 16, false, false, false, 0);

if( !device )
   return 1;

}

Solo se do questo mi da già errore.
Uso code::blocks e sia su ubuntu che su windows mi da:

‘dimension2d’ was not declared in this scope

error: expected primary-expression before ‘>’ token

Forse dovrei usare Visual Studio?
 
Rispondi
#4
"‘dimension2d’ was not declared in this scope"

Non c'entra nulla l'ide, prova ad includere l'header: #include <dimension2d.h>

(Butto ad indovinare)
 
Rispondi
#5
Ho provato ma non cambia niente inoltre #include <dimension2d.h>
viene già incluso con #include <irrlicht.h>

EDIT: stavolta invece di inserire solo quelle poche righe, l'ho inserite tutte e funziona, anche se non mi è chiaro come sia possibile.
 
Rispondi
#6
Sostituisci dimension2d<u32>(640,480) con core::dimension2d<u32>(640,480) oppure metti using namespace core; sotto using namespace irr; come ha fatto ManHunter.

Inoltre la direttiva #pragma comment(lib, "Irrlicht.lib") è valida solo per visual studio, se usi code::blocks vai nelle proprietà del progetto e linkala da lì.
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Irrlicht Engine Chip 9 2,039 01-11-2016, 12:48 AM
Ultimo messaggio: Chip
  Problema camera irrlicht Master Gabriel 12 2,752 18-12-2014, 09:40 AM
Ultimo messaggio: Master Gabriel
  Irrlicht Engine Info e Download friskon 12 6,226 12-04-2013, 11:25 AM
Ultimo messaggio: war10hacker
Question Problema irrlicht con directx Zettamax 0 1,444 23-02-2012, 06:49 PM
Ultimo messaggio: Zettamax
  [Irrlicht.net] Tutorial 1 - Tradotto Riddick 2 2,192 05-05-2011, 01:02 AM
Ultimo messaggio: ManHunter
  Irrlicht.Net Riddick 8 2,667 10-02-2011, 12:59 AM
Ultimo messaggio: Riddick
  irrlicht 1.7 puorcunicu 15 3,733 22-10-2010, 10:26 PM
Ultimo messaggio: Jonathan Archer
  Prima prova con irrlicht steve 4 2,150 10-07-2010, 08:31 PM
Ultimo messaggio: Riddick
  Download dei tool free e guide per Irrlicht Riddick 2 1,937 03-06-2010, 08:48 PM
Ultimo messaggio: Riddick
  Installare Irrlicht su: Dev-C++ e Code::Bocks Riddick 9 3,986 03-06-2010, 02:48 PM
Ultimo messaggio: Riddick

Vai al forum:


Browsing: 2 Ospite(i)