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(640, 480), 16, false, false, false, 0);

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.

Screen Aplicacion

//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.

download


Descargar:	holairr.zip
Version:	0.1
Actualizado:	December 22, 2009
Tamaño:		944.98 KB

1 2 3

Compartir esta entrada

DiggReddit
  • http://www.blueraven.com.mx Xbalanqué

    Pues la información ha sido de mucha utilidad, no se diga el archivode muestra; de verdad muchas gracias, me he estado quebrando todo el día la cabeza con el programa y por fin empiezo a ver claro de que se trata. Ahora estoy intentando agregarle las colisiones a la cámara.

  • Mr.x

    pero entonces ..sirve para hacer un juego o no…porque es en esta web diccen que es super facil:

    http://www.devmaster.net/engines/

    la verdad me llama la atencion..pero no se si un novato en progracion puede lograr algo con Irrlicht.
    porque darbasic pro me frustro con todos lo aditamentos que quieren que compres para lograr la experencia completa…

  • http://black-byte.com/ jotatsu

    irrlicht es sencillo pero aun así requiere conocimientos de programación. La diferencia con otros motores (ogre por ejemplo) es que no se necesita tener tan avanzados conocimientos (plantillas, patrones, etc). Aún así como muchos motores open algunas características están en desarrollo, es decir, no completamente implementadas.

  • Mr.zombie

    Esto tutorial esta bueno..pero se te olvido poner COMO COMPILAR???
    y la parte donde debes configuar el IDE necesita ser un poco mas claro..para los novatos.
    por cierto ..que libros recomendarias para empezar ..gracias

  • Pingback: Comenzando con Irrlicht « K A L A N()

  • Dérsir

    Tengo un problema y no sé ya dónde buscar :( Hago todo tal cual lo explicas, genero la solución con Visual C++ 2005 Express y según parece no hay problemas. De hecho, pone “1 correctos, 0 incorrectos, 0 omitidos”. Me genera un ejecutable, navego hasta su ruta, lo ejecuto y…no sale nada. Tengo en su misma ruta el archivo “irrlicht.dll” de “Win32-VisualStudio”, no lanza mensajes de error, simplemente no hace nada. Si lo ejecuto desde consola de comandos simplemente vuelve a mostrarme el prompt en la línea siguiente, como si el programa estuviera vacío. Tengo configuradas correctamente las rutas en Visual C++, ¿qué puede estar fallando? Gracias :)

  • http://black-byte.com/ jotatsu

    Saludos, intenta compilar alguno de los ejemplos del SDK a ver si obtienes el mismo resultado.

  • Versu

    Gracias por el tutorial. ¿No tendrás algo mas por casualidad? ¿La siguiente parte? Por cierto, en la versión 1.7.1 cuando se intenta compilar tu “hola mundo” con GCC da error en la creación del device, IrrlichtDevice *device, donde pones dimension2d debe ser u32 en vez de s32.
    También sería interesante que explicaras como creaste el modelo, el .x y otros tipos o algo mas sobre esto.
    Saludos!!