Professional Documents
Culture Documents
DESCRIPCION DEL PROGRAMA. El siguiente trabajo es un programa en OpenGL utilizando la tcnica de Render, en dicho programa se tiene la imagen de una hada la cual tiene unos ligeros movimientos y estos se ven reflejados en un cubo que se encuentra detrs de la imagen, dicho cubo se encuentra en movimiento el cual en cada uno de sus lados conforme va girando muestra los movimientos de la hada. A CONTINUACIN SE MUESTRA EL CDIGO DEL PROGRAMA.
#include <irrlicht.h> //libreria utilizada para realizar render con la imagen de una hada #include <iostream>
video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9; IrrlichtDevice *device = createDevice(driverType, core::dimension2d<s32>(640, 480), 16, false, false);
if (fairy) { fairy->setMaterialTexture(0, driver->getTexture("../../media/faerie2.bmp")); // se establece la textura difusa fairy->setMaterialFlag(video::EMF_LIGHTING, true); // se permite la iluminacion dinamica fairy->getMaterial(0).Shininess = 20.0f; // se establecen el tamao de luces especulares fairy->setPosition(core::vector3df(-10,0,-100));//se establece la posicion fairy->setMD2Animation ( scene::EMAT_STAND ); }
/* Para hacer reflejos especulares en el modelo necesitamos una luz dinmica en la escena. Tenemos que aadirla directamente en las cercanas del modelo. Adems, que no debemos hacer que el modelo quede oscuro, establecemos la luz ambiental a gris. */
/* Lo siguiente es agregar una cmara controlada por el usuario y aadir un cubo de ensayo y se deje girar para hacer la escena ms interesante. */
// se deja que el cubo gire y se establecen algunos ajustes de la luz scene::ISceneNodeAnimator* anim = smgr->createRotationAnimator( core::vector3df(0.3f, 0.3f,0));
test->addAnimator(anim); anim->drop();
/* Para probar la funcin de la tectura con render , necesitamos una textura de destino de representacin. creamos una, que llamamos IVideoDriver :: createRenderTargetTexture () y especificamos el tamao de la textura. */
{ // creamos un mensaje de error por si el hardware que utilizamos no es el adecuado gui::IGUISkin* skin = env->getSkin(); gui::IGUIFont* font = env->getFont("../../media/fonthaettenschweiler.bmp"); if (font) skin->setFont(font);
text->setOverrideColor(video::SColor(100,255,255,255)); }
/* Ahora tenemos que sacar todo. Cada cuadro se dibuja en la escena dos veces. Una vez en que la cmara fija se muestra la textura de destino al renderizar hay que desactivar la visibilidad del cubo de prueba, ya que tiene la textura de destino de representacin aplicada a ella. */
// hacer que el cubo fijo y la cmara esten invisibles y establecer la cmara como activa test->setVisible(false); smgr->setActiveCamera(fixedCam);
// hacer visible el cubo y ajustar la cmara controlada por el usuario como un activa test->setVisible(true); smgr->setActiveCamera(fpsCamera); }
driver->endScene();
// mostrar el numero de imgenes por segundo en la ventana int fps = driver->getFPS(); if (lastFPS != fps) { core::stringw str = L"Proyecto Utilizando Render"; str += " FPS:"; str += fps;