Comenzando Irrlicht
//Programa Principal
int main()
{
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<s32>(640, 480), 16, false, false, false, 0);
device->setWindowCaption(L"Hola Mundo - demo de Irrlicht");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
while(device->run())
{
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
Por ahora se usa main en vez de winMain, lo que quiere decir que antes de que aparezca la ventana principal aparecerá una consola. Para cambiar a winMain es necesario cambiar el tipo de proyecto al crearlo y utilizar:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprev, PSTR cmdline, int ishow)
Ahora:
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d
El device es la manera abstracta en que irrlicht se asocial con el sistema y con los recursos de hardware. Los parámetros son:
- deviceType : Es el renderer que soporta los llamados de bajo nivel del motor, en la versión actual es posible escoger entre video::EDT_NULL, video::EDT_SOFTWARE, video::EDT_BURNINGSVIDEO, video::EDT_DIRECT3D8, video::EDT_DIRECT3D9 and video::EDT_OPENGL. Para el caso del ejemplo se usa OpenGL, generalmente se usa EDT_SOFTWARE para compatibilidad, EDT_DIRECT3D9, EDT_DIRECT3D8 y EDT_OPENGL para obtener buen rendimiento y gráficos. EDT_NULL sirve para probar cuando existan bugs, para eliminar la posibilidad de que estos estén asociados al device.
- const core::dimension2d< s32 > & WindowSize : Dos enteros que indican el alto y ancho de la ventana.
- u32 bits : cantidad de bits por pixel para el modo pantalla completa. Irrlicht no maneja modo paleta así que por lo general es 16 o 32.
- bool fullscreen : Si se desea pantalla completa o no.
- bool stencilbuffer : Si se desea o no el stencil buffer, principalmente para sombras.
- bool vsync : Si se desea o no vertical sync, solo se tiene en cuenta para fullscreen.
- IEventReceiver eventReceiver : Un objeto para recibir eventos del sistema, por ahora sin uso.
device->setWindowCaption(L”Hola Mundo – demo de Irrlicht”);
Con esta instrucción se cambia el nombre de la ventana, la L se usa para indicar al compilador que la cadena esta formado de caracteres multibyte.
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
Obtenemos los apuntadores al manejador de escena y el driver creados por defecto.
while(device->run())
{
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
driver->endScene();
}
Este ciclo se ejecuta mientras el usuario no desee salir de la aplicación (alt-f4 o X) y limpia la pantalla device->run(). beginScene() por su parte limpia la pantalla, los parámetros son si se desea limpiar el buffer de color, el buffer z y de que color se desea limpiar la pantalla.
drawAll() indica que todos los nodos (visibles) de la escena deben ser dibujados, pero como en este caso no se ha agregado ninguno, no importa mucho. Finalmente endScene muestra el frame en pantalla.
device->drop();
Como convencion en irrlicht todos los objetos creados con alguna función *create*() deben ser liberados por el usuario, simplemente llamando la función drop(), esto es implementado a través de la clase interna IUnknown que mantiene un conteo de referencias para saber cuando un recurso puede ser liberado. La función drop() devuelve un booleano indicando si el objeto fue liberado o no.
Bueno, este ejemplo hasta ahora muestra una ventana de 640×480 en blanco, no muy atractiva, así que agregándole un par de líneas hasta convertirlo en esto mostramos un pequeño modelo en formato .x con texturas.

//Programa modificado
int main()
{
IrrlichtDevice *device = createDevice(EDT_DIRECT3D9, dimension2d<s32>(640, 480), 16, false, false, false, 0);
device->setWindowCaption(L"Hola Mundo - demo de Irrlicht");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IAnimatedMesh* modelo = smgr->getMesh("./media/logo.x");
smgr->addAnimatedMeshSceneNode(modelo);
smgr->setAmbientLight(SColorf(1,1,1,1));
smgr->addCameraSceneNode(0, vector3df(-5,3,-7), vector3df(0,0,0));
while(device->run())
{
driver->beginScene(true, true, SColor(255,255,255,255));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
Las nuevas 4 lineas:
IAnimatedMesh* modelo = smgr->getMesh(“./media/logo.x”);
smgr->addAnimatedMeshSceneNode(modelo);
smgr->setAmbientLight(SColorf(1,1,1,1));
smgr->addCameraSceneNode(0, vector3df(-5,3,-7), vector3df(0,0,0));
Carga un modelo, lo agregan a la escena, crean una luz y una cámara, pero espero explicar eso con mas detalle en el siguiente tutorial.
Descargar: holairr.zip Version: 0.1 Actualizado: December 22, 2009 Tamaño: 944.98 KB

Pingback: Comenzando con Irrlicht « K A L A N