#include <irrlicht.h>
//los namespace para definir funciones de irrlicht
using namespace irr;
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")
#endif
int main()
{
//define un device para la pantalla y cambiamos los valores a true para activar la sombra
IrrlichtDevice *device = createDevice(EDT_DIRECT3D9, dimension2d<u32>(640, 480), 16, false,
true, false, 0);
//en caso de error
if (!device)
return 1;
//Para ponerle un titulo a la ventana
device->setWindowCaption(L"Sombras en irrlicht");
//Creo un driver de video
IVideoDriver *driver = device->getVideoDriver();
//Creo un nodo para manejar la scena
ISceneManager *sceneManager = device->getSceneManager();
//Creo una mesh animada, este asset viene en la carpeta media de irrlicht
IAnimatedMesh *mesh = sceneManager->getMesh("room.3ds");
//Agrego una manipulador de mesh para el mapeo de texturas
sceneManager->getMeshManipulator()->makePlanarTextureMapping(mesh->getMesh(0), 0.004f);
//Creo un nodo de escena
ISceneNode *node = 0;
//Y le paso mi mesh
node = sceneManager->addAnimatedMeshSceneNode(mesh);
//Agrego una textura, este asset viene en la carpeta media de irrlicht
node->setMaterialTexture(0, driver->getTexture("wall.jpg"));
//Le asigno un color especular al material
node->getMaterial(0).SpecularColor.set(0, 0, 0, 0);
//Agrego el sombreado en la escena y sus propiedades
//Agrego un modelado de un vikingo en la escena, estos assets vienen integrados en
//la carpeta media de irrlicht cuando se descargan
IAnimatedMeshSceneNode *warrior = sceneManager->addAnimatedMeshSceneNode(sceneManager->getMesh("dwarf.x"));
//propiedades
//sombreado
warrior->addShadowVolumeSceneNode();
//posicion del personaje
warrior->setPosition(vector3df(-90, 70, 30));
//Velocidad de la animacion
warrior->setAnimationSpeed(15);
//Escala del personaje
warrior->setScale(vector3df(2, 2, 2));
//Agrego materiales
warrior->setMaterialFlag(EMF_NORMALIZE_NORMALS, true);
//Agrego la textura para mi personaje
warrior->setMaterialTexture(0, driver->getTexture("dwarf.jpg"));
//Establesco el color del sombreado de la escena
sceneManager->setShadowColor(SColor(150, 0, 0, 0));
//Creo una camara de tipo FPS(First Person Shooter) se maneja con las teclas de direccion del teclado
//y el mouse Alt + f4 para salir
ICameraSceneNode *fpsCamera = sceneManager->addCameraSceneNodeFPS(0, 80.f, 0.3f);
//Agrego sus propiedades
fpsCamera->setPosition(vector3df(0, 150, -250));
fpsCamera->setTarget(vector3df(0, 0, 0));
//Creo una luz ambiental
sceneManager->setAmbientLight(SColor(255, 255, 80, 80));
//Creo un luz y establesco su posicion
ILightSceneNode *myLight = sceneManager->addLightSceneNode();
myLight->setPosition(vector3df(0.0f, 20.0f, 0.0f));
//Agrego algunas propiedades de luz, difusse color y specular color
SLight lightData;
lightData.DiffuseColor = SColor(255, 0, 255, 0);
lightData.SpecularColor = SColor(255, 0, 0, 255);
//Le agrego las propiedades a mi luz
myLight->setLightData(lightData);
//Gameloop
while (device->run())
{
driver->beginScene(true, true, SColor(255, 100, 101, 140));
//Dibujo todo del sceneManager
sceneManager->drawAll();
driver->endScene();
}
//cerrar device
device->drop();
return 0;
}
No hay comentarios:
Publicar un comentario