introduccion a maratis con c++

15
INTRODUCCION Cuando se trata de desarrollar un videojuego disponemos de muchas herramientas para llevar a cabo su desarrollo que van desde donde hay que hacer todo en lineas de código hasta donde no hay que codificar una tan sola linea. Pero bien si hablamos de multiplataforma nuestro amplio repertorio de herramientas se reduce considerablemente y aun mas si nos reportamos como partidarios del movimiento del software libre o no tenemos dinero para pagar potentes y versátiles pero caras herramientas privativas. Seleccionar una de las herramientas que nos quedan aun permanecen en lista luego de lo anterior dicho puede llegar a ser una molestia por razones que no voy a mencionar, atravez de este documento se pretende conocer una útil herramienta para la grandiosa tarea de desarrollar un videojuego. Se le llama motor de juego o “Game Engine” a una a una serie de rutinas de programacion que permiten el diseño, la creación y la representación de un videojuego. Estando dentro de esta clasificacion tanto herramientas para diseñar videojuegos de manera gráfica mediante una interfaz como aquellas que precisan de codificar todo manualmente. CONCEPTOS INPORTANTES Hace unos días escuché al alguien decir “Un videojuego es mas que solamente software” y pienso que tiene toda la razón pues este es el punto de encuentro de muchas disciplinas que se unen para darnos el producto final que tantas horas hemos pasamos disfrutando. Así que antes de ir a lo bueno me tomaré un momento para explicarte algunos conceptos importantes. Como ya sabemos un videojuego es una realidad alterna en la que nos sumergimos, pero lo de realidad alterna no solo se queda en lo que nosotros vemos y hacemos con un control es nuestras manos sino que es una simulación muy bien abstraída de la realidad. Por lo general se hace una clasificación interna de un videojuego que costa de tres partes: 1. Motor Gráfico: En la pieza que se encarga de la parte visual y la que hace que nos enamoremos de las altamente realistas gráficas de muchos juegos, este por lo general trabaja con tres componentes que son la geometría, la iluminación y las cámaras. La geometría engloba todo esos objetos que vemos en pantalla y en muchos casos cosas que no son en si objetos como ser destellos de luz, fuego, humo etc. Un objeto es una porción de geometría con una forma especifica, puede ser una silla,un automóvil, un puerta, un personaje etc. Estos objetos están compuestos por polígonos en una espacio de tres dimensiones y se la cantidad del que ese compone el objeto(Low Poly, High Poly) ya que entre mas polígonos mayor cantidad de detalle puede llegar a tener el objeto. Las texturas son imágenes que acompañan a los objetos, estas se mapean sobre la superficie del objeto para simular materiales del mundo real.

Upload: gerardo-rivera-lopez

Post on 18-Jul-2015

94 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Introduccion a maratis con c++

INTRODUCCIONCuando se trata de desarrollar un videojuego disponemos de muchas herramientas para llevar a cabosu desarrollo que van desde donde hay que hacer todo en lineas de código hasta donde no hay quecodificar una tan sola linea. Pero bien si hablamos de multiplataforma nuestro amplio repertorio deherramientas se reduce considerablemente y aun mas si nos reportamos como partidarios delmovimiento del software libre o no tenemos dinero para pagar potentes y versátiles pero carasherramientas privativas. Seleccionar una de las herramientas que nos quedan aun permanecen enlista luego de lo anterior dicho puede llegar a ser una molestia por razones que no voy a mencionar,atravez de este documento se pretende conocer una útil herramienta para la grandiosa tarea dedesarrollar un videojuego.

Se le llama motor de juego o “Game Engine” a una a una serie de rutinas de programacion quepermiten el diseño, la creación y la representación de un videojuego. Estando dentro de estaclasificacion tanto herramientas para diseñar videojuegos de manera gráfica mediante una interfazcomo aquellas que precisan de codificar todo manualmente.

CONCEPTOS INPORTANTESHace unos días escuché al alguien decir “Un videojuego es mas que solamente software” y piensoque tiene toda la razón pues este es el punto de encuentro de muchas disciplinas que se unen paradarnos el producto final que tantas horas hemos pasamos disfrutando. Así que antes de ir a lo buenome tomaré un momento para explicarte algunos conceptos importantes.

Como ya sabemos un videojuego es una realidad alterna en la que nos sumergimos, pero lo derealidad alterna no solo se queda en lo que nosotros vemos y hacemos con un control es nuestrasmanos sino que es una simulación muy bien abstraída de la realidad.Por lo general se hace una clasificación interna de un videojuego que costa de tres partes:

1. Motor Gráfico:En la pieza que se encarga de la parte visual y la que hace que nos enamoremos de las altamenterealistas gráficas de muchos juegos, este por lo general trabaja con tres componentes que son lageometría, la iluminación y las cámaras.

La geometría engloba todo esos objetos que vemos en pantalla y enmuchos casos cosas que no son en si objetos como ser destellos deluz, fuego, humo etc.Un objeto es una porción de geometría con una forma especifica,puede ser una silla,un automóvil, un puerta, un personaje etc.

Estos objetos están compuestos por polígonos en una espacio de tresdimensiones y se la cantidad del que ese compone el objeto(LowPoly, High Poly) ya que entre mas polígonos mayor cantidad dedetalle puede llegar a tener el objeto.

Las texturas son imágenes que acompañan a los objetos, estas se mapean sobre la superficie delobjeto para simular materiales del mundo real.

Page 2: Introduccion a maratis con c++

Existen varios formas de usar una textura en un objeto 3D, el metodo que es usado desde tiemposinmemoriales es el Diffuse en el cual la imagen simplemente se estampa en la superficie del objeto,otros metodos mas recientes son el Normal map y el Specular map donde se usan imagenes parasimular que el objeto posee un relieve y que también refleja la luz que recibe.

Una lampara es una fuente de luz en una escena 3D y se comporta exactamente como una lamparaen la vida real, dependiendo del motor grafico son los tipos de lamparas que se pueden crear, la mascomun es la de punto u omnidireccional la cual la luz nace de un solo punto y se dispersa en todaslas direcciones y rara vez produce sombras, otra es la de tipo spot que se comporta como unalampara de mano y es la que por excelencia produce sombras.

Por ultimo la cámara, aunque esta no necesita mucha explicacion, es lo mismo que una camara enla vida real e incluso en algunos motores tienen exactamente la mismas configuraciones que unareal. Atravez de ella vemos el mundo 3D que hemos creado.

Todo esto y algunos otros aspectos que no he mencionado se unen para llegar a una etapa conocidacomo render. Que es el proceso de pintar en pantalla el mundo virtual que hay en la memoria delcomputador, este proceso ocurre varias veces por segundo para poder crear una secuencia animadade la misma manera en que se hacen los dibujos animados.

2. Motor Matemático y Motor Físico:Los pongo juntos porque van de la mano y yo personalmente los considero como una sola cosa. Elmotor físico es el que se encarga de que los objetos en la escena reaccionen de forma realista antefuerzas externas como ser explosiones, empujones, disparos y golpes! El motor Matemático es elque se encarga de como el motor físico hace estas simulaciones, acá es donde empieza la parte nerdde hacer un videojuego porque todo eso que te enseñaban en las clases de matemáticas y física a lascuales no prestabas atención se hace útil y necesario.

Se puede hablar de el motor de IA(inteligencia artificial) y del motor de audio, pero el primeropuede fácilmente quedar englobado dentro de lo que es el motor matemático y la parte del audio porlo general es solo audio pregrabado que se reproduce y en algunos casos se le aplica algún efecto entiempo real.

AHORA A LO BUENO...Ahora vamos a lo importante y la razon por la que lees esto, a partir del resto de este documento teenseño lo necesario para que empieces a desarrollar tus videjuegos con Maratis y C++ adviertodesde ahora que si no eres un programador y lo que buscas es desarrollar un juego tocando botonesestas en el sitio equivocado puesto que este es un documento dirigido para programadores que estánrelacionados con C++ y la programación orientada a objetos.

Page 3: Introduccion a maratis con c++

Yo hago uso de Ubuntu 14.04 al hacer este pequeño manual pero el proceso aplica a Windows conalgunas diferencias, lo que haya que instalar lo iré explicando mas adelante.

Me falto mencionar que Maratis es un motor de videojuegos que a pesar de su sencillez hademostrado ser muy potente, es código abierto y plataforma.

Sin mas preámbulos conoscamoslo, vamos a su pagina oficial: http://www.maratis3d.org/

Podemos ver una reseña del programa y notamos que dispone una interfaz gráfica y muchos medirán: No acabas de decir “aquí no se hacen las cosas con botoncitos” los que quieran hacerlo asíváyanse, pues cabe aclarar una cosa: Maratis dispone de un editor visual para posicionar objetos 3Den la escena y editar alguna opciones sobre los mismos, también se puede programar elcomportamiento en Lua pero de esta forma no estamos explotando el potencial del motor maratissolo estamos accediendo a las capacidades de una pequeña parte de el y como dice allá arriba en lareseña “obtener acceso total al motor con C++ ” pues voy a centrarme mas que nada en esto. Buenoahora que he dicho eso podemos continuar.

Váyase a la pestaña “Download” y buscamos la versión para nuestro So

Page 4: Introduccion a maratis con c++

# Estas son la versiones para diferentes plataformas #El plugin para exportar objetos 3D desde blender#El código fuente de maratis, mas tarde veremos porque es de importancia para nosotros

Luego descomprimimos el archivo que acabamos de bajar

Si estas usando Ubuntu 14.04 al igual que yo basta con que entres a la carpeta, luego a la carpetabin y le des doble click al archivo MaratisEditor

Page 5: Introduccion a maratis con c++

Si usas otra distribución de linux o una version de ubuntu anterior es posible que tengas que copiarlos archivos 'libMCore.so', 'libMEngine.so ' y 'libsndfile.so' a la carpeta \usr\lib o abrirlo porconsola para que el programa funcione.

EL EDITOR DE MARATISAunque aprender a usar editor de maratis no es el objetivo de este material el uso del mismo puederesultar nos útil por lo que le dedico una pequeña sección en este documento.

Lo primero será ir a file->new project y luego nos pedirá la carpeta donde queremos nuestroproyecto.

Page 6: Introduccion a maratis con c++

yo lo he guardado en \home\ariel\proyectos y le he dado el nombre de MaratisPrueba, despuesentramos a la carpeta donde guardamos el proyecto y nos encontramos con esto:

Se crea un archivo con extensión .mproj y se crean varias carpetas, los nombres de las carpetashablan por si solos, en levels se guardan los niveles en formato XML con extensión .level, en meshsse guardan los objetos 3D, en maps las se guardan las texturas y en scripts se guardan los archivosde código de lua. Estas carpetas son de especial importancia para nosotros.

Ahora voy a enseñarte algunas herramientas básicas del editor de maratis:

herramientas:2. Mover un objeto3.Rotar un objeto4.Escalar un objeto(cambiar tamaño)5.añadir una cámara

Page 7: Introduccion a maratis con c++

6.añadir un objeto(entidad)7.añadir una lampara8. añadir un sonido9. añadir un texto10.correr el juego11. tipo de render(tecnologia que se usa para visualizar las escena)12.selector de escenas13.opciones de escena

PestañasEn el panel izquierdo de maratis hay trespestañas para editar opciones sobre los objetos,de izquierda a derecha la primer tiene opcionespara editar las transformaciones del objetoseleccionado, es decir la posición, la rotación yla escala del objeto.

En la segunda pestaña se encuentra opcionesinherentes a cada objeto individualmente comose la animación que tiene y opciones de lassimulación física del mismo. En la tercerapestaña se pueden añadir comportamientos quehacen que un objeto siempre oriente sudirección a hacia otro objeto o un objeto siga aotro cundo este se mueve; estos casi siempre seusan para definir el comportamiento de unacámara.

Cabe mencionar que el formato de archivo 3Dnativo de maratis es el .mesh y los niveles seguardan en un archivo .level, también se puedeprogramar el comportamiento en Lua para crearun videojuego sencillo dando clik en opcionesde escena y en el panel izquierdo aparecerá la opción “Script” se da clic y se selecciona el archivode lua donde hemos programado el comportamiento de los objetos en la escena, paradocumentación de la codificación el Lua puede ver la documentación oficial:http://wiki.maratis3d.org/index.php?title=Lua_scripting

LLEGA C++Si eres diligente a estas alturas ya habrás averiguado que en maratis se hacen los juego con el editor,se programa el comportamiento en lua y para tener mas opciones se programan plugins con C++, almenos esta es la manera que se fomenta en la pagina oficial, pero a mi opinión esta manera no es nicómoda ni óptima así que propongo otra manera: Hagamos que C++ sea la herramienta principal yque el editor de maratis y el código en Lua sea secundario. Debemos tomarnos una pausa aquí para explicar la diferencia entre el motor de Maratis y el Editor,primero, el motor de Maratis engloba las rutinas que contienen al motor gráfico, al matemático y alfísico, además trae rutinas para la reproducción de audio y una api, este conjunto de componentes

Page 8: Introduccion a maratis con c++

facilita en sobre manera el trabajo de desarrollar un videojuego ya al desarrollador solo le queda eltrabajo de programar los escenarios, la jugabilidad y la IA del juego.El editor de Maratis es solamente un pequeña aplicacion que haciendo uso de las rutinasmencionadas anteriormente nos facilita la tarea de ubicar los objetos, luces y cámaras dentro de laescena y a vincular todo con un código de lua para crear un juego simple y además el editor puedeexportar el ejecutable de un juego final que funciona también con las mismas rutinas.Volviendo al metodo que propuse anteriormente consiste en programar en C++ usando las rutinas demotor de Maratis obviando el uso del editor como principal herramienta para el desarrollo, para estoen vez de usar lo que el programa que descargamos vamos a bajarnos el código fuente de maratispara trabajar directamente con el. Para poder bajarnos el código fuente de maratis necesitamos instalar subversion, en ubuntu seinstala con este comando: sudo apt-get install subversion y tambien necesitamos las los archivos deC++ para trabajar con OpenGl los cual los podemos instalar con: sudo apt-get install freeglut3-devy por ultimo ocupamos las herramienta de compilacion de C++ la instalamos con: sudo apt-getinstall build-essential una vez que tenemos instalado todo esto nos vamos de nuevo a la pestaña dedescarga en la pagina: http://www.maratis3d.org/?page_id=5 7 y nos vamos a “Source Code” yentramos al enlace.Luego copiamos la linea remarcada y la pegamos en una terminal.

Presionamos enter y en código fuente se descargará automáticamente.

Page 9: Introduccion a maratis con c++

Ahora revisamos nuestra carpeta personal, por lo general el codigo fuente se descarga aquí a menosque lo hayamos configurado para que se haga en otra carpeta. Buscamos la carpeta llamada“maratis-read-only” esta carpeta contiene el código fuente entero del motor de maratis y del editor.Podemos echar un vistazo a la carpeta y esto es lo que veremos:

A nosotros nos interesa la carpeta trunk que es donde esta todo el código de maratis y la carpeta3rdparty contiene código de terceros que maratis necesita para funcionar. El desarrollador demaratis utilizó una herramienta llamada Scons para compilarlo por lo que ocupamos tener python2.x instalado en el computador, si eres usuario gnu/linux no tendras problemas con esto.

Para compilar maratis necesitamos entrar a la carpeta trunk\dev\ y vemos un archivo llamadoscons.py, al ejecutar este archivo la compilación de maratis se ejecuta automáticamente.Para ejecutarlo abrimos una terminal y escribimos cd ~/maratis-read-only/trunk/dev para ubicarnosen la carpeta donde está el archivo a ejecutar, es muy recomendable cambiar ~ por la direcciónabsoluta de la carpeta. Luego ejecutamos el comando python scons.py y en seguida empezará acompilar el código.

Si el codigo se compila correctamente deberá dar este mensaje al final:

en caso de culminar exitosamente la compilación se va a crear una subcarpeta llamada prod dentrode la carpeta dev acá se guarda el producto final de la compilación ahora entramos a las carpeta que

Page 10: Introduccion a maratis con c++

tenga el nombre de nuestro sistema incluido en el nombre, en mi caso linux2, habrá una carpetallamada release dentro y dentro de release eso:

La carpeta MSDK contiene los archivos que integran el motor de maratis: libMCore y libMEngine

La carpeta Maratis contiene además de los archivos mencionados anteriormente los archivos queintegran el editor, aquí tenemos los archivos que descargamos anteriormente.

En la carpeta Examples contiene un ejemplo de uso del motor del maratis con C++ sin usar eleditor, y este ejemplo es de especial importancia para nosotros porque vamos a hacer exactamentelo mismo que en el ejemplo, si lo ejecutamos vemos esto:

mas tarde nos internaremos en su codigo fuente y explicaré como funciona.

En caso de que usen un So de 64 bits es posible que se haya lanzado este error durante lacompilación:

Page 11: Introduccion a maratis con c++

Este error se debe a que algunas de las librerias que estan en la carpeta 3rdparty ya vienencompilados pero vienen compilados para 32 bits por lo que hay que reemplazarlos por otras de 64bits, bájatelas acá: https://www.mediafire.com/?efmer587r2yi9u5 y descomprimes el archivo en lacarpeta maratis-read-only para reemplazar las librerías de 32 bits.

CONOCIENDO EL CODIGO FUENTE

Si volvemos a la carpeta dev vamos a ver una serie de carpetas que vemos a continuación:

En todas estas carpetas están distribuidos todos los archivos que componen tanto el motor demaratis como el editor, para abrir el proyecto con un IDE de C++ nos vamos a la carpeta de Projectsdonde vamos a encontrar a maratis como proyectos de IDE para cada plataforma pero la carpeta quede verdad nos interesa es la carpeta Examples, dentro de la carpeta examples hay subcarpetasllamadas: CodeBlocks10 que es donde esta el proyecto para el IDE, la carpeta Data que es dondeestá los recursos audiovisuales en especial los objetos 3D, y la carpeta ManualUse que es dondeesta el código fuente del proyecto, este proyecto es el que abrimos anteriormente, entraremos a lacarpeta CodeBlocks10 y abriremos el proyecto.Nos encontramos que el proyecto tiene dos archivos de código: Main.cpp y MyGame.cpp, en elprimero se encuentra en código necesario para arrancar el motor e iniciar una ventana en pantalla,para entender esta parte es recomendable que te des una vuelta por la documentación:http://wiki.maratis3d.org/index.php?title=Code_documentation ahora vemos el código deMyGame.cpp en el cual voy a explicar:

El archivo MyGame.cpp tiene una clase con el mismo nombre que hereda de la clase MGame, laclase MGame es en si un juego, al heredar una clase de MGame podemos crear un juego completodentro de esta clase y correrlo en fácilmente por medio de polimorfismo.

La clase MGame tiene aparte del constructor y destructor dos métodos sobrescritos que se llamanonBegin() y update().El método onBegin se ejecuta cuando el juego se inicia, es decir cuando la ventana del juego acabade aparecer en pantalla, en el ejemplo que analizamos es donde se cargan los objetos 3D y se leaplican los comportamientos fiscos.El método update es el que se ejecuta cada vez que un fotograma es dibujado en pantalla.

A continuación explico el código del método onBegin:

MEngine * engine = MEngine::getInstance();MSystemContext * system = engine->getSystemContext();

Page 12: Introduccion a maratis con c++

Acá se obtiene un puntero a la instancia del motor que actualmente esta corriéndose, puntero engineapunta a la instancia del motor entero mientras que system apunta a una parte del motor quedenominamos sistema ya que tiene métodos que tienen que ver con el control de ventanas, manejode directorios, etc.

La primera obtiene un punterohacia el nivel del juego activo llamado level, la desicion if comprueba que el valor del puntero nosea null, en caso de que el puntero level tenga valor null significa que no se pudo obtenerexitosamente el nivel y Mlog envía un mensaje de error a consola.

Es esta linea se comprueba si el nivel que acabamos de obtener esta vacío, es decir no tiene ningunaescena, en caso de no tener ninguna vamos a construir una como veremos mas adelante.

En la primera linea se crea un arreglo de caracteres que servirá para guardar direcciones de losobjetos 3D que vamos a cargar posteriormente, la segunda linea obtiene la dirección del directoriode trabajo, es decir la dirección de la carpeta donde se encuentra nuestro juego.

Recordemos que en nivel esta vacio por lo que le añadimos una nueva escena en la primera linea.Ahora la escena existe pero carece de los componente característicos de toda escena 3D paraempezar la camara, la añadimos en la segunda linea, en las tres linea restantes le damospropiedades, para empezar el color de fondo, el método setClearColor recibe como parametro unobjeto tipo MVector el cual básicamente es como un vector en matemáticas y física, los

MLevel * level = engine->getLevel();if(! level){ MLOG(4, "Cannot get level from engine"); return;}

if(level->getScenesNumber() == 0){

char filename[256];const char * workingDir = system->getWorkingDirectory();

// add sceneMScene * scene = level->addNewScene();

// cameraMOCamera * camera = scene->addNewCamera();

camera->setClearColor(MVector3(0.5f, 0.5f, 0.5f)); // set grey clear colorcamera->setPosition(MVector3(0.0f, -80.0f, 20.0f));camera->setEulerRotation(MVector3(90.0f, 0.0f, 0.0f));

Page 13: Introduccion a maratis con c++

componentes del vector representan la cantidad de color rojo verde y azul respectivamente.Los dos métodos restantes le dan posición lineal y rotacional a la cámara, también reciben comoparámetros vectores, y si bien recordamos que en fisica todo son vectores en el desarrollo devideojuegos ocurre algo similar.

Es esta sección de código carga el primer objeto 3D en la escena, cabe destacar a en maratis se lesllama entidades a los objetos 3D.En la primer linea de código se obtiene la dirección absoluta de archivo que queremos cargar ennuestra escena con el método getGlobalFilename, el primer parámetro es la variable dondepensamos almacenar la dirección absoluta, es segundo parámetro es el directorio de trabajo queobtuvimos anteriormente y el ultimo la dirección relativa del objeto dentro del directorio de trabajo.La segunda linea lee la malla del objeto, se podría ver la malla como la descripción de la forma delobjeto.En la ultima linea se crea un objeto 3D en la escena a partir de la malla que hemos cargado enmemoria anteriormente.

// add robot entitygetGlobalFilename(filename, workingDir, "meshs/robot.mesh");MMeshRef * meshRef = level->loadMesh(filename);MOEntity * robot =scene->addNewEntity(meshRef);

{// create entitiesgetGlobalFilename(filename, workingDir, "meshs/box.mesh");meshRef = level->loadMesh(filename);

MOEntity * box1 = scene->addNewEntity(meshRef);MOEntity * box2 = scene->addNewEntity(meshRef);MOEntity * box3 = scene->addNewEntity(meshRef);

// set coordsbox1->setPosition(MVector3(70, 65, 0));box1->setScale(MVector3(4, 4, 0.2f));

box2->setPosition(MVector3(70, 65, 40));box2->setEulerRotation(MVector3(0, -35, 0));

box3->setPosition(MVector3(75, 65, 70));

// enable physics, MPhysicsProperties create a static box shape by defaultMPhysicsProperties * phyProps = box1->createPhysicsProperties();

phyProps = box2->createPhysicsProperties();phyProps->setMass(1);

phyProps = box3->createPhysicsProperties();phyProps->setMass(1);

}

Page 14: Introduccion a maratis con c++

En las primeras lineas ocurre exactamente lo mismo que la sección anterior, solo cabe destacar quese crean varios objetos 3D en la escena con la misma malla, esto se puede hacer cuando todos losobjetos en la escena son idénticos.Lo interesante de esta seccion esta en la linea: MPhysicsProperties * phyProps = box1->createPhysicsProperties(); que es donde se crea la simulacion fisica para el objeto box1, phyPropsapunta a las propiedades físicas del objeto, la linea: phyProps->setMass(1); le dice al objeto que sumasa es de 1 kg.

No voy a hablar de del resto del código del método porque es un poco mas de los mismo. Se añadeun texto bajo los mismos principios que los objetos y al final se añade una lampara a la escena y seposiciona.

Ahora voy a hablar un poco sobre el método update().

Acá se da casi lo mismo que al principio de el método onBegin(), se obtiene una instancia del motorque esta corriendo actualmente pero en vez de obtener una puntero system se obtiene una de inputque es sirve para controlar la entrada por mouse, teclado y joystick.La ultima linea llama a la función update() de la clase base, sino llamamos a este método losfotogramas no se dibujaran en pantalla y solo tendremos una pantalla oscura.

En esta sección obtiene el nivel y escena activa en el juego, los ifs son para interrumpir la ejecucióndel método en caso de que se fracase al obtener el nivel o la escena.

MEngine * engine = MEngine::getInstance();MInputContext * input = engine->getInputContext();MGame::update();

MLevel * level = engine->getLevel();if(! level){ return;}

// get current sceneMScene * scene = level->getCurrentScene();

if(! scene){ return;}

Page 15: Introduccion a maratis con c++

El método getEntityByIndex(0) obtiene un objeto de la escena mandandole como parametro elnumero de este, dicho numero se asigna en el orden en que fueron creado en la escena empezandopor el cero, también se puede darles una cadena de caracteres como nombre a un objeto.El metodo addAxisAngleRotation() es un metodo para rotar un objeto dándole el valor del anguloque queremos que rote dándole primero un vector con valor 1 para los ángulos donde se quiererealizar dicha rotación.El método isKeyPressed() devuelve true si se presiona una tecla del teclado especifica dándolecomo parámetro una cadena que representa a la tecla, para conocer todos los identificadores visite ladocumentación en la wiki.Los método setIntensity() y getIntensity() son para especificar la intensidad de la luz que emite lalampara y para conocerla respectivamente. Hasta acá llegaré con esta breve introducción a Maratis con C++, te dejo los experimentos einvestigación en la documentación a ti, tal vez mas adelante escriba un libro y no una simpleintroducción como esta.Para crear tu propio juego con lo que aprendiste acá puede modificar el codigo de la clase MyGamey trabajar con los dos metodos que te enseñé, pero si te siente mas experimentado puedes crear unproyecto nuevo y vincularlo con los scripts de construcción de scons para compilarlo.

MOEntity * entity = scene->getEntityByIndex(0); if (entity) entity->addAxisAngleRotation(MVector3(0.0f, 0.0f, 1.0f), 1.0f);

// change light intensity with keyboardMOLight * light = scene->getLightByIndex(0);

if(light && input->isKeyPressed("UP")){

// inputs are also virtual, you can create your hown keys or axislight->setIntensity(light->getIntensity() + 0.1f);

}

if(light && input->isKeyPressed("DOWN")){

light->setIntensity(MAX(0.0f, light->getIntensity() - 0.1f));}