sábado, 11 de abril de 2015

Trabajando con Nodos en Irrlicht


Descargar Assets para este proyecto


#include <irrlicht.h>

//los namespace para definir funciones de irrlicht
using namespace irr;
using namespace core;
using namespace video;
using namespace scene;

#if defined(_MSC_VER)
#pragma comment(lib, "Irrlicht.lib")
#endif

int main()
{
 //define un device para la pantalla
 IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<u32>(640, 480), 16, false,
  false, false, 0);

 //en caso de error
 if (!device)
  return 1;

 //Creo un driver de video
 IVideoDriver *driver = device->getVideoDriver();

 //Creo un nodo manejador de escenas
 ISceneManager *sceneManager = device->getSceneManager();

 //Agrego mi mesh md2 pero con animacion
 //NOTA este modelo y su respectiva textura se encuentra en la carpeta media de irrlicht
 IAnimatedMesh *mesh = sceneManager->getMesh("sydney.md2");

 //Creo un nodo de animacion
 IAnimatedMeshSceneNode *node = sceneManager->addAnimatedMeshSceneNode( mesh );

 //Creo un segundo nodo de animacion y le paso el mismo mesh
 IAnimatedMeshSceneNode *node2 = sceneManager->addAnimatedMeshSceneNode( mesh );

 //Si ambos son true
 if (node && node2)
 {
  //Les asigno un material y su textura
  node->setMaterialFlag(EMF_LIGHTING, false);
  node->setMaterialTexture(0, driver->getTexture("sydney.bmp"));

  node2->setMaterialFlag(EMF_LIGHTING, false);
  node2->setMaterialTexture(0, driver->getTexture("sydney.bmp"));

  //Hago que mi nodo2 sea hijo del primer nodo
  node->addChild(node2);

  //Establesco una posicion para mi nodo2
  node2->setPosition(vector3df(-30 ,0 ,40));

  //Establesco posicion y rotacion del nodo
  node->setPosition(vector3df(0, 0, -30));
  node->setRotation(vector3df(0, 70, 0));
 }

 //Agrego una vista o camara a la escena
 sceneManager->addCameraSceneNode(0, vector3df(-30, 0, 40), vector3df(0, 5, 0));

 //Gameloop
 while (device->run())
 {
  driver->beginScene(true, true, SColor(255,255,255,255));
 
  //dibujo todo en mi escena
  sceneManager->drawAll();

  driver->endScene();
 }

 //cerrar device
 device->drop();

 return 0;
}


No hay comentarios:

Publicar un comentario