domingo, 24 de agosto de 2008

Tutorial 2

Hola a todos, en este tutorial no vamos a profundizar demasiado debido a que yo creo que despacio las cosas se hacen mejor :). Vamos a poner una textura a un modelo que teníamos previamente cargado en el tutorial anterior, para ello vamos a compilar el siguiente template:

#include
#include
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")

int main() {

// Inicializamos Irrlicht
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d (640, 480), 32, false, false, false, 0);

// Guardamos los apuntadores que serán de utilidad
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();

// Le ponemos un título a nuestra ventana
device->setWindowCaption(L"Hola Mundo en Irrlicht [--A M T--]");

// Creamos un cubo
scene::ISceneNode* cubo = smgr->addCubeSceneNode();
cubo->setPosition(vector3df(0,0,0));
cubo->setScale(vector3df(2,2,2));
cubo->setRotation(vector3df(0,0,5));




//Creamos una camara
smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 0, 0));



// El ciclo principal de nuestra aplicación

while (device->run())

{

cubo->setRotation(cubo->getRotation() + vector3df(0.01,0.01,0.01));



driver->beginScene(true, true, SColor(255, 255, 255, 140));
smgr->drawAll();
driver->endScene();




}

// Nos aseguramos de cerrar de manera adecuada Irrlicht
device->drop();

// Siempre es bueno regresar un cero para indicar que todo salió bien
return 0;
}

Al compilar el programa da como resultado esto:


Bueno, aquí os pongo la textura para que os la copieis a la carpeta de trabajo:



para cargar una textura se necesita este codigo:

void irr::scene::ISceneNode::setMaterialTexture ( u32 textureLayer,


video::ITexture * texture

) [inline]


vamos a analizar el codigo:

void irr::scene::ISceneNode --------------> aqui se supone que hay que poner el objeto al que le vamos a exponer la textura que debe ser un ISceneNode ya antes creado, como lo que hicimos antes: scene::ISceneNode* cubo = smgr->addCubeSceneNode();
es decir, sería la palabra cubo, porque es un ISceneNode

->setMaterialTexture()-------------------> funcion que pone un material a un modelo
[
parametros: ( 0, driver->getTexture("../../media/293.jpg") );

0= textureLayer
driver->getTexture("../../media/293.jpg") =texture (Le decimos a la aceleradora 3d
que cargue la textura desde su localización)


]


quedaría esto despues de tantas cosas

//carga una textura 2 directorios arriba/media/293.jpg que es la textura que os he puesto antes!
cubo->setMaterialTexture( 0, driver->getTexture("../../media/293.jpg") );


despues de haber cargado la textura habra que hacer posible que se vea:

cubo->setMaterialFlag(EMF_LIGHTING, false);

se trata de implementar luminosidad a la textura con un flag, que es como un tipo de vista para las texturas: pueden ser wireframe,lighting,mask,etc, tal y como lo hemos puesto nos quedaría lo siguiente:




#include
#include
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")

int main() {

// Inicializamos Irrlicht
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d (640, 480), 32, false, false, false, 0);

// Guardamos los apuntadores que serán de utilidad
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();

// Le ponemos un título a nuestra ventana
device->setWindowCaption(L"Hola Mundo en Irrlicht [--A M T--]");

// Creamos un cubo
scene::ISceneNode* cubo = smgr->addCubeSceneNode();
cubo->setPosition(vector3df(0,0,0));
cubo->setScale(vector3df(2,2,2));
cubo->setRotation(vector3df(0,0,5));


//AQUI ESTA NUESTRA TEXTURA
cubo->setMaterialTexture( 0, driver->getTexture("../../media/293.jpg") );
cubo->setMaterialFlag(EMF_LIGHTING, false);



//Creamos una camara
smgr->addCameraSceneNode(0, vector3df(0, 30, -40), vector3df(0, 0, 0));



// El ciclo principal de nuestra aplicación

while (device->run())

{

cubo->setRotation(cubo->getRotation() + vector3df(0.01,0.01,0.01));



driver->beginScene(true, true, SColor(255, 255, 255, 140));
smgr->drawAll();
driver->endScene();




}

// Nos aseguramos de cerrar de manera adecuada Irrlicht
device->drop();

// Siempre es bueno regresar un cero para indicar que todo salió bien
return 0;
}



RESULTADOS:

Al haber metido una textura y haberla implementado al cubo, compilamos, y nos va a quedar esto:


bonito verdad??? ya sabemos meter una textura :)

No hay comentarios: