Professional Documents
Culture Documents
Desarrollo de Juegos
en Linux con OGRE3D
Daniel Barrientos Carrera, Enrique Puertas Sanz, José Carlos Cortizo Pérez
P
ese al enorme esfuerzo invertido en potenciar
linux@software.com.pl
56 Linux+ 5/2007
para programadores
Desarrolla tus propios juegos desde 0 en GNU/Linux con OGRE3D
un videojuego es un proceso largo y costoso. para Windows). Además, OGRE3D provee mente el nivel de detalle de forma progre-
El presupuesto de algunos videojuegos supe- soporte para programas de vértices y sha- siva, provee exportadores para la mayoría
ra incluso al de grandes super producciones ders personalizados escritos en GLSL, HLSL, de los programas de modelado 3D (3D Stu-
cinematográficas. Cg y en ensamblador, gestiona automática- dio Max, Maya, Blender, LightWave, Sket-
Pero Linux y el mundo del Software
Libre cuentan con un importante factor a su Listado 2. Programa principal de nuestro primer juego con OGRE
favor que puede hacer que todo esto cambie
en un futuro: una enorme comunidad dis- int main( ) {
puesta a colaborar, y multitud de recursos Root *root;
libres para la creación de videojuegos. Con RenderWindow *renderWindow;
herramientas como Blender u OGRE3D (que EventProcessor *eventProcessor;
usaremos para este pequeño tutorial) se pue- SceneManager *sceneMgr;
den conseguir resultados que poco tienen Camera *camara;
que envidiar a otras herramientas comer- Viewport *viewPort;
ciales. Entity *ninja;
Light *luz;
El motor OGRE3D SceneNode *nodoNinja;
OGRE3D (Object-Oriented Graphics Rendering root = new Root();
Engine, http://www.ogre3d.org) es un motor //mostramos ventana de configuracion
de renderizado 3D orientado a escenas es- if (!root->showConfigDialog() ) {
crito en C++ y diseñado para hacer más fácil delete root;
e intuitivo el desarrollo de aplicaciones que return 0;
utilizan aceleración 3D. OGRE3D abstrae }
los detalles de utilización de las librerías root->initialise(false);
gráficas subyacentes (Direct3D y OpenGL) //creamos ventana
y provee una interfaz basada en clases in- renderWindow = root->createRenderWindow("Mi primer programa con
tuitivas (gestor de escena, nodo del grafo de OGRE",600,600,false);
escena, cámara, etc.). A pesar que OGRE3D eventProcessor = new EventProcessor();
no pueda ser definido como un motor de eventProcessor->initialise(renderWindow);
juegos completo, sí que provee muchas eventProcessor->startProcessingEvents();
facilidades, así como plugins para extender sceneMgr = root->createSceneManager(ST_GENERIC);
la funcionalidad del motor como pueda ser camara = sceneMgr->createCamera("camara1");
ODE (motor de físicas), lo cual lo convierte viewPort = renderWindow->addViewport(camara);
en una herramienta muy potente al alcance cargaRecursos();
de todos. //establecemos el ambiente para que haya algo
OGRE3D es multiplataforma (Windows, sceneMgr->setAmbientLight(ColourValue(0.3,0.3,0.3));
Linux, Mac Os X), lo cual nos permite de- sceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);
sarrollar juegos fácilmente portables entre sceneMgr->setSkyBox(true,"Examples/StormySkyBox");
diversas plataformas, de hecho ya se está ninja = sceneMgr->createEntity("ninja1","ninja.mesh");
trabajando en una versión de OGRE3D para luz = sceneMgr->createLight( "luz1" );
XBox, lo que permitirá migrar juegos que luz->setType(Light::LT_POINT);
desarrollemos para Linux a esta nueva plata- luz->setPosition( 0,100,-100);
forma (actualmente podemos desarrollar en luz->setVisible( true );
Linux y compilar el juego en Windows, o in- nodoNinja = sceneMgr->getRootSceneNode()->createChildSceneNode("nodoNinja
cluso desarrollar en Linux y mediante cross- ");
compiling obtener también los ejecutables nodoNinja->attachObject( ninja );
nodoNinja->setPosition( 0, 0, 0 );
Listado 1. Compilación e instalación de camara->setPosition(0 ,100 , -400 );
OGRE3D camara->setDirection( 0, 0, 1 );
//BUCLE PRINCIPAL
tar xjf ./OGRE-linux_osx-v1-0- while( !eventProcessor->getInputReader()->isKeyDown(KC_ESCAPE) ) {
?.tar.bz2 nodoNinja->yaw( Radian(0.1) );
cd OGREnew root->renderOneFrame();
./bootstrap }
./configure (Para nvidia añadir -- delete eventProcessor;
with-platform=GLX) delete root;
make return 0;
make install (ejecutar como root) }
www.lpmagazine.org 57
para programadores
Desarrolla tus propios juegos desde 0 en GNU/Linux con OGRE3D
58 Linux+ 5/2007
para programadores
Desarrolla tus propios juegos desde 0 en GNU/Linux con OGRE3D
www.lpmagazine.org 59
para programadores
Desarrolla tus propios juegos desde 0 en GNU/Linux con OGRE3D
60 Linux+ 5/2007
para programadores
Desarrolla tus propios juegos desde 0 en GNU/Linux con OGRE3D
eventProcessor->getInputReader()
www.lpmagazine.org 61