Küçüklüğümden beridir nedense içimde hep bir oyun yapma hevesi vardı. Oyun oynarken, bende böyle bi oyun yapsam şunu koyarım içine, böyle yaparım diye hayal ederdim. Henüz programlama nedir bilmediğim zamanlarda bile oyun yapabilmek için “oyun yapma” programları kullandığımı hatırlıyorum. (Hatta zamanında bildirgec’e yazdığım yazıyı hala duruyor)Son birkaç aydır üzerinde uğraştığım oyun motoru olan irrlicht‘i elimden geldiğince sizlere göstermek istiyorum. Aslında bu yazıyı niye yazdığımı bende bilmiyorum, sadece yazmak istedim.Bir oyun motorundan beklentiniz nelerdir? Önce bu soruya cevap vermek gerekiyor aslında. Ne tür bir oyun yapacağınız, nasıl bir görüntü istiyorsunuz, oyuncuyu nasıl birşeyin içine çekmek istiyorsunuz, bunların hepsi önemli. Eğer 2B bir oyun yapmaksa isteğiniz, 3B oyun motorları size gereksiz bir yük yapacaktır. Yada sistemi yormayan sade bir oyun peşindeyseniz, iyi denebilecek birçok oyun motoru size gereksiz yük olacaktır. Yapamayacaklarından değil sadece fazladan yük olurlar.Burada tanıtmak istediğim oyun motoru irrlicht. C++ ile yazılmış, open-source, opengl veya directx seçenekleriyle birden fazla işletim destekli bir oyun motoru. Hatta open-source en iyi oyun motorlarından diyebiliriz. Hatta birçok paralı oyun motorundan daha iyi olduğuda söylenmekte.Biraz irrlicht nin özelliklerinden bahsetmek istersek;-Direct3D veya opengl render yapabilme-Birden fazla işletim sisteminde çalışabiliyor. (Linux,windows, OSX..)-Karakter animasyon sistemi (olmazsa olmaz tabii)-Parça efekti, light map gibi özel efektler.-Java, C#, Delphi gibi programları ile yazılabilme olanağıDaha birçok özelliği var ama hepsinden bahsetmeye gerek yok. Bütün özelliklerine buradan ulaşabilirsiniz.irrlicht nin birde örnek kodunu göstermeden geçmek olmaz tabii.#include /*irrlicht temel olarak irr ismi adı altında 5 dala ayrılmış bir sistem.Biz her fonksiyonun başına irr::scene:: gibi şeyler yazmak istemediğimiz içinilk önce bunlardan kuruluyoruz*/using namespace irr;/*Aşşağıdaki beşliyi bırakmanız daha iyi olur. Ama örnek böyle vermiş devam edeceğiz*/using namespace core;using namespace scene;using namespace video;using namespace io;using namespace gui;#ifdef _IRR_WINDOWS_#pragma comment(lib, “Irrlicht.lib”)#pragma comment(linker, “/subsystem:windows /ENTRY:mainCRTStartup”)#endifint main(){IrrlichtDevice *device =createDevice( video::EDT_SOFTWARE, dimension2d(640, 480), 16,false, false, false, 0);/*irrlicht nin rendlerları arasında birde software render var. Ki bu örnekte o kullanılmış. Biz buraya aynen video::EDT_OPENGL yazarak opengl de kullanabilirdik.*/if (!device)return 1;device->setWindowCaption(L”Hello World! – Irrlicht Engine Demo”);/*Başlık tanımlanmış*/IVideoDriver* driver = device->getVideoDriver();ISceneManager* smgr = device->getSceneManager();IGUIEnvironment* guienv = device->getGUIEnvironment();/* smgr diye tanımlanan nesnemiz bizim ençok kullanacağımız nesne. Sahnemizdeki herşeyi on borçluyuz. Gui ise ekranda belirecek olan statik şeyler. Healt bar bun örnek olarak verilebilir. */guienv->addStaticText(L”Hello World! This is the Irrlicht Software renderer!”,rect(10,10,260,22), true);IAnimatedMesh* mesh = smgr->getMesh(“../../media/sydney.md2”);if (!mesh){device->drop();return 1;}IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );if (node){node->setMaterialFlag(EMF_LIGHTING, false);node->setMD2Animation(scene::EMAT_STAND);node->setMaterialTexture( 0, driver->getTexture(“../../media/sydney.bmp”) );}smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));while(device->run()){driver->beginScene(true, true, SColor(255,100,101,140));smgr->drawAll();guienv->drawAll();driver->endScene();}device->drop();return 0;}
irrlicht’in kolay kullanımı görebilmeniz için verdiğim bu örnektede görebildiğimiz üzere herşey pointerlarla hallediliyor. Örneğin bizde sadece sahne yöneticisinin poınter ı var. Yada nodelerimizin pointerlarını tutuyoruz. Irrlicht nin en sevdiğim yanlarından biride bu.Irrlicht yi denemek isterseniz buradan indirdiğiniz dosyanın içindeki bin kalsöründen yapılmış örnekleri görebilir yada examples kasöründen örnekleri değiştirip derleyebilirsiniz.