Ogre Game Engine

63
Desarrollo de Juegos en GNU/Linux “con OGRE” Comunidad Arch Linux Chile “D´ ıa del Software Libre 2010” Curic´ o - 25 de septiembre de 2010

Transcript of Ogre Game Engine

  • Desarrollo de Juegos en GNU/Linuxcon OGRE

    Comunidad Arch Linux Chile

    Da del Software Libre2010

    Curico - 25 de septiembre de2010

  • Por que pensar endesarrollar Juegos?

  • Por que nos gustan.

    Por que se puede.

    Por que hace falta.

  • Por que nos gustan.

    Por que se puede.

    Por que hace falta.

  • Por que nos gustan.

    Por que se puede.

    Por que hace falta.

  • Que es OGRE?

  • Un motor de renderizado degraficos.

    Es un framework dedesarrollo.

  • Un motor de renderizado degraficos.

    Es un framework dedesarrollo.

  • Caractersticas de OGRE

  • Caractersticas

    Escrito en C++

    Orientado a escenas.

    Diseno completamente OO.

    Soporte Direct3D y OpenGL

  • Caractersticas

    Multiplataforma: GNU/Linux, OS X y WinSucks.

    Lenguaje de declaracion de materiales

    Soporte para vertex shader.

    Soporte de texturas: PNG, JPEG, TGA, BMP,PVRTC o DDS.

    Soporte de texturas dinamicas.

  • Que podemos hacer conOGRE?

  • Una imagen vale mas que milpalabras.... y un video?

  • Instalando OGRE

  • Dependencias

    Compilador y herramientas de configuracion(automake, cmake, etc)

    OIS, freeimage, freetype, libzzip, libxaw, libxrandr

    doxygen, graphviz, nvidia-cg-toolkit, boost, cppunit(Opcionales)

  • OGRE

    Obtener las ultimas fuentes:http://www.ogre3d.org/download/source

    Configurar con cmake

    Compilar con make

    sudo make install

  • Otras librerias

    Cegui

    ODE

  • Lo Basico.

  • La raiz

    El objeto Root es el punto de entrada al sistema deOGRE. Debe ser el primer objeto creado y el ultimo en

    ser destruido.

    Permite configurar el sistema. (showConfigDialog())

    Inicializa el sistema con las opciones determinadaspor el usuario.

    Permite obtener punteros a otros objetos

  • RenderSystem

    Es una clase abstracta que define la comunicaciondirecta con el sistema de renderizado por medio dealguna API ej: D3DRenderSystem para Direct3D.

    Normalmente no es necesario manipular esta clase.

  • Facilitemos las cosas para comenzar... utilicemos elFramework de Ejemplo que Ogre nos proporciona.

  • Existen 3 clases fundamentales:

    SceneManager

    Entity

    SceneNode

  • SceneManager

    Todo lo que aparece en pantalla es manejado porSceneManager.

    Mantiene la locacion de cada objeto en la escena.

    Mantiene los datos sobre las camaras de la escena.

    Luces, Planos, etc.

    Hay multiples tipos. Para renderizar terrenos, mapas,etc.

  • Entity

    Una entidad es el tipo de un objeto que puede serrenderizado en la escena.Un entidad es basicamente cualquier cosa quepueda ser representado por una grilla 3D (mesh).

    Una cosa a notar es que OGRE separa los objetosrenderizables por locacion y orientacion.

    Un entidad debe ir siempre atada a un SceneNode.

  • SceneNode

    Mantiene informacion de locacion y orientacion detodos los objetos atados a el (attached to).

    Este tipo de nodo no es un objeto que se dibujeen la escena.

    Puede contener un numero X de objetos atados.

    La posicion de un SceneNode es siempre relativa asu SceneNode padre.

  • Coordenadas y vectores

    Como muchos otros motores derenderizado, Ogre utilza el sigu-iente modelo de coordenadas

    Ogre cuenta con una clase:Vector que representa la posi-cion y direccion. Hay vectoresdefinidos para 2, 3 y 4 dimen-siones (Vector2, Vector3 y Vec-tor4)

  • 1 #include "TutorialApplication.h"2 // Constructor3 TutorialApplication :: TutorialApplication(void)4 {5 }6 // Destructor7 TutorialApplication ::~ TutorialApplication(void)8 {9 }

    1011 // -----------------------------------------------------------------------12 void TutorialApplication :: createScene(void)13 {14 // Creamos una entidad15 Ogre:: Entity* ogreHead = mSceneMgr ->createEntity("Head", "ogrehead.mesh");1617 // Creamos un SceneNode y atamos la entidad para que se muestre en la escena18 Ogre:: SceneNode* headNode = mSceneMgr ->getRootSceneNode ()->createChildSceneNode

    ();

    19 headNode ->attachObject(ogreHead);2021 // Luz ambiente22 mSceneMgr ->setAmbientLight(Ogre:: ColourValue (0.5, 0.5, 0.5));2324 // Creamos una luz25 Ogre:: Light* l = mSceneMgr ->createLight("MainLight");26 l->setPosition (20 ,80 ,50); // Posicionamos la luz27 }

  • Camaras

    Una camara es lo que usamos para visualizar la escenacreada. Es un objeto especial parecido a un SceneNode.

    Posee como funciones: setPosition, yaw, roll y pitch

    Puede ser atada a cualquier SceneNode.

    Su posicion es relativa a su padre.

    Pueden existir multiples camaras pero solo se utiliza una cada vez.

    Para mostrar ciertas porciones de la escena se utilizan cameraholders. Son SceneNodes que se posicionan en la escena yapuntan hacia donde la camera mira.

  • ViewPorts

    Es posible tener multiples SceneManagers al mismotiempo, dividir la pantalla en multiples areas y tener

    camaras separadas para renderizar cada area.El ViewPort es el area desplegada en la ventana(RenderWindow)

  • Luces

    Point: Emite luz desde si misma a cualquierdireccion (una ampolleta).

    SpotLight: Imita una linterna.

    Directorial: Simula por ejemplo la luz de la Luna,una luz lejana que proviene de una sola direccionque abarca todo la escena

    Existen varias propiedades para las luces. Las masimportantes son los colores diffuse y specular.Cada script de material define su comportamiento aestas caractersticas de una luz.

  • Sombras

    Modulative Texture Shadow: De muy bajo costocomputacional. Menos realista

    Modulative Stencil Shadow: Renderiza la sombrabasada en el volumen del objeto.

    Additive Stencil Shadow: Renderiza cada luz porseparado. De alto costo.

  • Cielos

    3 tipos

    SkyBoxes

  • SkyBoxes

    Basicamente un cubo que rodea a todos los objetos enla escena.

    1 mSceneMgr ->setSkyBox(true ,"Examples/SpaceSkyBox");

  • Cielos

    3 tipos

    SkyBoxes

    SkyDomes

  • SkyDomes

    Bastante similar a un SkyBox. La diferencia radica enque la textura es proyectada dentro del SkyBox de

    forma esferica.1 mSceneMgr ->setSkyDome(true ,"Examples/CloudySky" ,5,8);

    3 Parametro es la curvatura del Domo (2 a 65).Menor para mejor efecto a la distancia. Altos paramenor distorcion y un efecto mas suave.

    4 Parametro es el numero de veces que la textura esrepetida en el Domo. Depende de la textura usada.

  • Cielos

    3 tipos

    SkyBoxes

    SkyDomes

    SkyPlanes

  • SkyPlane

    Un plano sobre el que se renderiza alguna textura. Almirar hacia el horizonte se ve donde termina el

    plano.1 // creamos un plano

    2 Ogre:: Plane plane;

    3 plane.d = 1000; // distancia de vision del plano

    4 plane.normal = Ogre:: Vector3 :: NEGATIVE_UNIT_Y;

    5

    6 mSceneMgr ->setSkyPlane(true , plane , "Examples/SpaceSkyPlane",

    1500, 75);

    4 Parametro es el tamano del SkyPlane (1500x1500unidades)

    5 Parametro El numero de veces que la textura esrepetida.

  • Niebla

    Es un filtro aplicado a los objetos no una entidad. Hayque preocuparse por el color del fondo.

    Lineal.

    Exponencial.

    Exponencial2.

  • Terrenos

    Pueden ser generados con un plano al que leasignamos una textura o utilizando un SceneManager

    para terrenos.1 mSceneMgr = mRoot ->getSceneManager(ST_EXTERIOR_CLOSE);2 mSceneMgr ->setWorldGeometry("terrain.cfg");

  • Recursos

    Son los objetos reusables de los que disponemos:

    Mallas

    Texturas

    Scripts (Materiales, Particulas, etc)

    La carga de estos es realizada por el objetoResourceGroupManager

    Podemos indicar de donde cargar los recursos con elarchivo resources.cfg

  • resources.cfg

    # Resources required by the sample browser and most samples.

    [Essential]

    Zip=../../../media/packs/SdkTrays.zip

    FileSystem=../../../media/thumbnails

    # Common sample resources needed by many of the samples.

    # Rarely used resources should be separately loaded by the

    # samples which require them.

    [Popular]

    FileSystem=../../../media/fonts

    FileSystem=../../../media/materials/programs

    FileSystem=../../../media/materials/scripts

    FileSystem=../../../media/materials/textures

    FileSystem=../../../media/materials/textures/nvidia

    FileSystem=../../../media/models

    FileSystem=../../../media/particle

    Zip=../../../media/packs/skybox.zip

    [General]

    FileSystem=../../../media

  • Plugins

    El SDK de OGRE es extensible por medio de Plugins.Cada plugin agrega una funcionalidad en particular al

    sistema.Los plugins deben ser activados/desactivados para su

    utilizacion.Son cargados en tiempo de ejecucion.

  • plugins.cfg

    # Defines plugins to load

    # Define plugin folder

    PluginFolder=

    # Define plugins

    # Plugin=RenderSystem_Direct3D9

    # Plugin=RenderSystem_Direct3D10

    # Plugin=RenderSystem_Direct3D11

    Plugin=RenderSystem_GL

    # Plugin=RenderSystem_GLES

    Plugin=Plugin_ParticleFX

    Plugin=Plugin_BSPSceneManager

    Plugin=Plugin_CgProgramManager

    Plugin=Plugin_PCZSceneManager

    Plugin=Plugin_OctreeZone

    Plugin=Plugin_OctreeSceneManager

  • Scripts

    Muchas caractersticas son manejadas va scripts,simples archivos de texto que pueden ser modificados

    provocando cambios inmediatos en la aplicacion.

    Materiales

    Partculas

    Compositores

    Overlay

    Fuentes

  • Materiales

    Define un material (el uso de una textura). Paraidentificarlos se utiliza la extension .material

    El formato del script es pseudo-C++, con seccionesdelimitadas por llaves y comentarios.

  • 1 // Comentario2 material walls/funkywall13 {4 // La tecnica a utilizar5 technique6 {7 // Primera pasada8 pass9 {

    10 ambient 0.5 0.5 0.5 // respuesta a la luz11 diffuse 1.0 1.0 1.01213 // Comportamiento Textura 114 texture_unit15 {16 texture wibbly.jpg17 scroll_anim 0.1 0.018 wave_xform scale sine 0.0 0.7 0.0 1.019 }20 // Comportamiento Textura 221 texture_unit22 {23 texture wobbly.png24 rotate_anim 0.2525 colour_op add26 }27 }28 }2930 }

  • Partculas

    Permiten definir sistemas de partculas que seranutilizados como templates. Utilizan la extension.particle para ser diferenciados

  • 1 // Fader2 affector ColourFader3 {4 red -0.255 green -0.256 blue -0.257 }8 }9

    10 // A downpour11 particle_system Examples/Rain12 {13 material Examples/Droplet14 particle_width 2015 particle_height 10016 cull_each true17 quota 1000018 // Make common direction straight down (faster than self oriented)19 billboard_type oriented_common20 common_direction 0 -1 02122 // Area emitter23 emitter Box24 {25 angle 026 emission_rate 10027 time_to_live 528 direction 0 -1 029 velocity 5030 width 100031 height 100032 depth 033 }3435 // Gravity36 affector LinearForce37 {38 force_vector 0 -200 039 force_application add40 }4142 }

  • Partculas

    1 ParticleSystem* Psys;2 pSys = mSceneMgr ->createParticleSystem("Lluvia" , "Examples/Rain");3 mNode ->attachObject( pSys ); // Adjuntamos la particula para que se vea

  • Blender

    Blender es una herramienta open source para elmodelado 3D.

    Permite crear mallas con texturas para renderizado oanimacion.

    Porque nos importa a nosotros?Con OGRE tenemos una herramienta de renderizadopero necesitamos crear el contenido que mostraremos.

  • Herramientas

    OgreXmlConverter : Convierte un archivo xml aun binario de Ogre .mesh

    BlenderImport: Importa un mesh de Ogre aBlender

    Meshes Exporter: Exporta un diseno de blender aOgre (texturas, materiales, animaciones, etc)

    BlenderSceneExporter: Export una escena desdeblender a formato dotScene (Camaras, Luces,descripcion de objetos)

    dotScene Format: Un Framework para la carga dearchivos dotScene dentro de Ogre.

  • Wrappers

    Existen variados wrappers que podemos utilizar paracrear aplicaciones OGRE:

    MOGRE un wrapper .Nethttp://www.ogre3d.org/tikiwiki/MOGRE

    Python-OGRE Interface basada en Py++.http://www.python-ogre.org/

    Ogre4j Permite utilizar las libreras OGRE enaplicaciones Java.http://www.ogre3d.org/tikiwiki/Ogre4j

  • Mas informacion

    www.ogre3d.org

    www.blender.org

  • Preguntas?