Coder.gr

Καλωσήρθατε στην σελίδα Coder.gr
Tuesday, February 09 2010 @ 06:29 AM GMT-3

IrrLicht Engine

Desktop C++H IrrLicht Engine είναι μια engine 3d γραφικών ,
είναι open source και έχει γραφτεί αποκλιστικά σε C++.
To κυριότερο είναι open source και cross platform :). Υποστηρίζει
  • Direct3D (εκδόσεις 8.1 κ9.0)
  • OpenGL(έκδοση 2.0)
  • IrrLicht Engine software renderer
  • Apfelbaum Software Renderer
  • null device


  • και απο πλατφόρμες.. χαχα τι να πρωτογράψω :) :

  • Windows 98, ME, NT 4, 2000, XP, XP64
  • Linux
  • MacOS
  • Sun Solaris/SPARC


  • Υποστηρίζει επίσης textures όπως:

  • Adobe Photoshop (.psd)
  • JPEG File Interchange Format (.jpg)
  • Portable Network Graphics (.png)
  • Truevision Targa (.tga)
  • Windows Bitmap (.bmp)
  • Zsoft Paintbrush (.pcx)


  • και mesh αρχεία όπως:

  • 3D Studio meshes (.3ds)
  • B3D files (.b3d)
  • Alias Wavefront Maya (.obj)
  • Cartography shop 4 (.csm)
  • COLLADA (.xml, .dae)
  • DeleD (.dmf)
  • FSRad oct (.oct)
  • Irrlicht scenes (.irr)**
  • Microsoft DirectX (.x) (binary & text)
  • Milkshape (.ms3d)
  • My3DTools 3 (.my3D)
  • OGRE meshes (.mesh)
  • Pulsar LMTools (.lmts)
  • Quake 3 levels (.bsp)
  • Quake 2 models (.md2)



  • Και αφού σας έδειξα τις ιδιότητες της IrrLicht, ώρα για ένα απλό παράδειγμα hello world!

    στην περίπτωση μου ,γράφω με visual c++ 2005 ,
    αλλά μπορείτε να γράψετε και εσείς με την IrrLicht χρισιμοποιώντας ό,τι IDE προτιμάτε,
    αρκει να το ρυθμίσετε να δουλεύει με την IrrLicht.


    Ηello World! παράδειγμα:
    
    //αρχικά κάνουμε include την IrrLicht.
    #include <irrlicht.h>
    


    Η IrrLicht έχει 5name spaces.

    
    using namespace core;
    using namespace scene;
    using namespace video;
    using namespace io;
    using namespace gui;
    

    αλλά με ένα μόνο namespace περιλαμβάνουμε στο πρόγραμμα τα υπόλοιπα 5.
    
    //to namespace pou perilamvanei ola ta alla 5
    using namespace irr;
    


    linking στην library της IrrLicht.

    
    #pragma comment(lib, "Irrlicht.lib")
    


    αρχή
    
    int main()
    {
    


    τώρα, για να δημιουργήσουμε την engine χρησιμοποιούμε την μέθοδο 'createDevice()' η οποία έχει 7παράμετρους:

  • deviceType: ο τύπος συσκευών, μπορεί να είναι Null, software engine, Direct3D 9, Direct3D 8 ή OpenGL
    στο παράδειγμα θα χρησιμοποιήσω Direct3D 9, δηλαδή θα το δηλώσω με EDT_DIRECT3D, μπορείτε να χρησιμοποιήσετε ό,τι άλλο θέλετε π.χ
    EDT_SOFTWARE, EDT_NULL, EDT_DIRECT3D9, EDT_DIRECT3D8, EDT_OPENGL.
  • windowSize: το μέγεθος του παραθύρου.. στο παράδηγμα θα χρησιμοποιήσω 640x480
  • bits: αριθμός bits όταν το πρόγραμμα/παιχνίδι τρέχει σε full screen.. η παράμετρος θα είναι 16 ή 32αν το πρόγραμμα παιχνίδι δεν τρέχει σε full screen η παράμετρος bits αγνοήτε..
  • fullscreen: true για να τρέχει το πρόγραμμα σε full screen, false για το αντίθετο...
  • sencilbuffer: Specifies if we want to use the stencil buffer for drawing shadows. (auto einai copy paste:P)
  • vsync: Specifies if we want to have vsync enabled. This is only useful in full screen mode.( ka auto copy paste einai! :P :P)
  • eventReceiver: An object to receive events. We do not want to use this parameter here, and set it to 0.(dyskoli i metafrasei re paidia.... :) )


  • γράφουμε το όνομα που θέλουμε να έχει το παράθυρο μας π.χ:
    
    device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
    


    καλούμε το video driver, scene manager και το gui enviroment
    
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();
    IGUIEnvironment* guienv = device->getGUIEnvironment();
    


    βάζουμε κείμενο στο στην πάνο αριστερή γωνία του προγράμματος και στην κάτω δεξιά.
    
    guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
    	 rect<int>(10,10,200,22), true);
    
    τώρα φορτώνουμε κάτι ενδιαφέρον στο πρόγραμμα, π.χ ένα αρχείο mesh Quake 2 (.md2)
    
    IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
    IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );
    


    τώρα βάζουμε την παράμετρο του φώς σε false γιατί δεν έχουμε δυναμικό φώς στην σκηνή και το mesh αρχείο θα φένετε τελείως μαύρο.
    βάζουμε επείσης το animation να τρέχει 0-310 fps.
    και τελικά φορτώνουμε το texture του.
    
    if (node)
    {
    	node->setMaterialFlag(EMF_LIGHTING, false);
    	node->setFrameLoop(0, 310);	
    	node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
    }
    


    τώρα για να βλέπουμε την σκηνή βάζουμε μια κάμερα στη θέση (0, 10, -40).
    
    smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));
    


    ok τώρα που τα σετάραμε όλα ας τα εμφανίσουμε στην οθόνη!
    
    while(device->run())
    {
    	driver->beginScene(true, true, SColor(255,100,101,140));
    
    	smgr->drawAll();
    	guienv->drawAll();
    
    	driver->endScene();
    }
    

    και τέλος κλείνουμε το πρόγραμμα ρίχνοντας την μηχανή για έξοδο.
    
    	device->drop();
     return 0;
    }
    
    . Eλπίζω το άρθρο να σας φανεί ενδιαφέρον αν όχι εκπαιδευτικό :P.
    Ξεκίνησα να δουλεύω με την ΙrrLicht πριν λίγες μέρες, αφότου πείρα ένα mail που με ήθελε κάποιος να μπώ στο project του για ένα 3D παιχνίδι...

  • Αρθρογραφία :P
  • IrrLicht Homepage
    και τα λίγα πράγματα που ξέρω έγω πάνω στην IrrLicht
    IrrLicht Engine | 0 σχόλια | Δημιουργία νέου λογαριασμού
    Τα ακόλουθα σχόλια ανήκουν στους συγγραφείς τους. Η παρούσα ιστοσελίδα δεν ευθύνεται για το περιεχόμενο τους