Her zamanki gibi başlık dosyalarını ekleyip, ad uzayı kullanımını belirtiyoruz.
Sonrada kütüphane dosyasını bağlıyoruz.
#include <irrlicht.h> #include <iostream>
using namespace irr;
#pragma comment(lib, "Irrlicht.lib")
|
En başta kullanıcıya sürücü tipini soruyoruz. Sonra Device'ı oluşturup pencere başlığını ayarlıyoruz.
Son olarak 'VideoDriver' nesnesine bir gösterici tanımlıyoruz.
int main() { // let user select driver type video::E_DRIVER_TYPE driverType;
printf("Please select the driver you want for this example:\n"\ " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\ " (d) Software Renderer\n (e) Apfelbaum Software Renderer\n"\ " (f) NullDevice\n (otherKey) exit\n\n");
char i; std::cin >> i;
switch(i) { case 'a': driverType = video::EDT_DIRECT3D9;break; case 'b': driverType = video::EDT_DIRECT3D8;break; case 'c': driverType = video::EDT_OPENGL; break; case 'd': driverType = video::EDT_SOFTWARE; break; case 'e': driverType = video::EDT_SOFTWARE2;break; case 'f': driverType = video::EDT_NULL; break; default: return 0; }
// create device
IrrlichtDevice *device = createDevice(driverType,
core::dimension2d<s32>(512, 384));
if (device == 0)
return 1;
device->setWindowCaption(L"Irrlicht Engine - 2D Graphics Demo");
video::IVideoDriver* driver = device->getVideoDriver(); |
Bu örnekteki tüm grafikler tek bir bitmap dosyasında bulunmaktadır(2ddemo.bmp).
'colorkey' tabanlı sprite lar çizdireceğimiz için , bu dokuyu yükleyip motora hangi kısımlarının görünmez
olacağını belirtmemiz gerekiyor. Bu örnekte çizilmeyecek rengi direk belirtmiyoruz sadece motora (0,0) konumundaki
rengi baz almasını söylüyoruz. Bunu kendimizde ayarlayabilirdik(driver->makeColorKeyTexture(images, video::SColor(0,0,0,0))).
Burada dikkat edilecek olan şu ki 'makeColorKeyTexture' sadece renge göre bir 'alpha' kanalı oluşturacaktır.
video::ITexture* images = driver->getTexture("../../media/2ddemo.bmp"); driver->makeColorKeyTexture(images, core::position2d<s32>(0,0)); |
2 farklı yazı tipiyle yazı yazabilmek için yazı tiplerini yüklüyoruz.
İlkini dahili font olarak ayarlayıp ikincisini dosyadan yüklüyoruz.
Burada fazladan 2 dikdörtgen tanımlıyoruz(çizilecek 2 resmin yerini belirtmek için).
gui::IGUIFont* font = device->getGUIEnvironment()->getBuiltInFont(); gui::IGUIFont* font2 = device->getGUIEnvironment()->getFont(
"../../media/fonthaettenschweiler.bmp");
core::rect<s32> imp1(349,15,385,78);
core::rect<s32> imp2(387,15,423,78); |
Her şey hazır, şimdi sadece çizim döngüsünde herşeyi çizdireceğiz. Bu örnekte sadece 2d grafikler
bulunmakta ama 2d,3d karıştırmak hiç sorun yaratmayacaktır. Bir 'scenemanager' oluşturarak 3d çizimler eklemeyide deneyebilirsiniz.
while(device->run() && driver) { if (device->isWindowActive()) { u32 time = device->getTimer()->getTime(); driver->beginScene(true, true, video::SColor(0,120,102,136));
|
Önce 3 tane sprite çizdiriyoruz. Burada 'alpha' kanallarını ayarladığımız için siyah bölgeler çizilmeyecektir.
Son parametre 'alpha' kanalı kullanımını onaylar.
Son parametreden önceki, bir renk belirtir. Bu sprite'ın rengini
ayarlar. Burada (255,255,255,255) vererek(beyaz) orjinal renginde çizdiriyoruz.
3. sprite'ın rengi zamana göre değişmekte.
// draw fire & dragons background world driver->draw2DImage(images, core::position2d<s32>(50,50), core::rect<s32>(0,0,342,224), 0, video::SColor(255,255,255,255), true);
// draw flying imp
driver->draw2DImage(images, core::position2d<s32>(164,125),
(time/500 % 2) ? imp1 : imp2, 0,
video::SColor(255,255,255,255), true);
// draw second flying imp with colorcylce
driver->draw2DImage(images, core::position2d<s32>(270,105),
(time/500 % 2) ? imp1 : imp2, 0,
video::SColor(255,(time) % 255,255,255), true); |
Yazı yazdırmak oldukça basit. Kodun kendisi açıklayıcı olacaktır.
// draw some text if (font) font->draw(L"This is some text.", core::rect<s32>(130,10,300,50), video::SColor(255,255,255,255));
// draw some other text
if (font2)
font2->draw(L"This is some other text.",
core::rect<s32>(130,20,300,60),
video::SColor(255,time % 255,time % 255,255)); |
Son olarak, irrlicht logosunu çizdiriyoruz(renk ve alpha kullanımı yok).
Fare imleci ile aynı pozisyonada yarı saydam bir kare çizdiriyoruz.
// draw logo driver->draw2DImage(images, core::position2d<s32>(10,10), core::rect<s32>(354,87,442,118));
// draw transparent rect under cursor
core::position2d<s32> m = device->getCursorControl()->getPosition();
driver->draw2DRectangle(video::SColor(100,255,255,255),
core::rect<s32>(m.X-20, m.Y-20, m.X+20, m.Y+20));
driver->endScene();
}
} |
Hepsi bu kadar.
device->drop();
return 0;
}
|
|