SlideShare una empresa de Scribd logo
Desarrollo de Juegos en GNU/Linux
            “con OGRE”




                   Comunidad Arch Linux Chile
                     “D´ del Software Libre
                       ıa
                             2010”

                   Curic´ - 25 de septiembre de
                        o
                               2010
¿Por que pensar en
desarrollar Juegos?
Por que nos gustan.
Por que nos gustan.
Por que se puede.
Por que nos gustan.
Por que se puede.
Por que hace falta.
¿Que es OGRE?
Un motor de renderizado de
gr´ficos.
  a
Un motor de renderizado de
gr´ficos.
  a
Es un framework de
desarrollo.
Caracter´
        ısticas de OGRE
Caracter´
        ısticas


  Escrito en C++
  Orientado a escenas.
  Dise˜o completamente OO.
      n
  Soporte Direct3D y OpenGL
Caracter´
        ısticas


  Multiplataforma: GNU/Linux, OS X y WinSucks.
  Lenguaje de declaraci´n de materiales
                       o
  Soporte para vertex shader.
  Soporte de texturas: PNG, JPEG, TGA, BMP,
  PVRTC o DDS.
  Soporte de texturas din´micas.
                         a
Ogre Game Engine
¿Que podemos hacer con
OGRE?
Ogre Game Engine
Ogre Game Engine
Ogre Game Engine
Ogre Game Engine
Una im´gen vale m´s que mil
       a            a
palabras.... y un video?
Instalando OGRE
Dependencias




 Compilador y herramientas de configuraci´n   o
 (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 B´sico.
    a
La raiz
El objeto “Root” es el punto de entrada al sistema de
OGRE. Debe ser el primer objeto creado y el ultimo en
                      ser destruido.
  Permite configurar el sistema. (showConfigDialog())
  Inicializa el sistema con las opciones determinadas
  por el usuario.
  Permite obtener punteros a otros objetos
RenderSystem
 Es una clase abstracta que define la comunicaci´n
                                                o
 directa con el sistema de renderizado por medio de
  alguna API ej: D3DRenderSystem para Direct3D.
Normalmente no es necesario manipular esta clase.
Facilitemos las cosas para comenzar... utilicemos el
Framework de Ejemplo que Ogre nos proporciona.
Existen 3 clases fundamentales:
SceneManager
Entity
SceneNode
SceneManager



 Todo lo que aparece en pantalla es manejado por
                SceneManager.
 Mantiene la locaci´n de cada objeto en la escena.
                   o
 Mantiene los datos sobre las c´maras de la escena.
                               a
 Luces, Planos, etc.
Hay multiples tipos. Para renderizar terrenos, mapas,
                         etc.
Entity


 Una entidad es el tipo de un objeto que puede ser
 renderizado en la escena.
 Un entidad es b´sicamente cualquier cosa que
                 a
 pueda ser representado por una grilla 3D (mesh).
 Una cosa a notar es que OGRE separa los objetos
 renderizables por locaci´n y orientaci´n.
                         o             o
 Un entidad debe ir siempre atada a un SceneNode.
SceneNode


 Mantiene informaci´n de locaci´n y orientaci´n de
                    o            o            o
 todos los objetos atados a el (attached to).
 Este tipo de nodo no es un objeto que se “dibuje”
 en la escena.
 Puede contener un n´mero X de objetos atados.
                      u
 La posici´n de un SceneNode es siempre relativa a
          o
 su SceneNode padre.
Coordenadas y vectores
Como muchos otros motores de
renderizado, Ogre utilza el sigu-
iente modelo de coordenadas

Ogre cuenta con una clase:
Vector que representa la posi-
ci´n y direcci´n. Hay vectores
  o           o
definidos para 2, 3 y 4 dimen-
siones (Vector2, Vector3 y Vec-
tor4)
1   # include " T u t o r i a lA p p l i c a t i o n . h "
 2     // Constructor
 3   T u t o r i a l A p p l i c at i o n :: T u t o r i a l A pp l i c a t i o n ( void )
 4   {
 5   }
 6     // Destructor
 7   T u t o r i a l A p p l i c at i o n ::~ T ut o r i a l A p p li c a t i o n ( void )
 8   {
 9   }
10
11   // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
12   void T u t o r i a l Ap p l i c a t i o n :: createScene ( void )
13   {
14          // Creamos una entidad
15          Ogre :: Entity * ogreHead = mSceneMgr - > createEntity ( " Head " , " ogrehead . mesh " ) ;
16
17          // Creamos un SceneNode y atamos la entidad para que se muestre en la escena
18          Ogre :: SceneNode * headNode = mSceneMgr - > getRootSceneNode () -> c r e a t e C h i l d S c e n e N o d e
                  () ;
19          headNode - > attachObject ( ogreHead ) ;
20
21          // Luz ambiente
22          mSceneMgr - > setAmbientLight ( Ogre :: ColourValue (0.5 , 0.5 , 0.5) ) ;
23
24          // Creamos una luz
25          Ogre :: Light * l = mSceneMgr - > createLight ( " MainLight " ) ;
26          l - > setPosition (20 ,80 ,50) ; // Posicionamos la luz
27   }
Ogre Game Engine
C´maras
  a
Una c´mara es lo que usamos para visualizar la escena
     a
creada.
  Es un objeto especial parecido a un SceneNode.
  Posee como funciones: setPosition, yaw, roll y pitch
  Puede ser atada a cualquier SceneNode.
  Su posici´n es relativa a su padre.
           o
  Pueden existir m´ltiples c´maras pero solo se utiliza una cada vez.
                  u         a
  Para mostrar ciertas porciones de la escena se utilizan “camera
  holders”. Son SceneNodes que se posicionan en la escena y
  apuntan hacia donde la camera mira.
ViewPorts
  Es posible tener m´ltiples SceneManagers al mismo
                     u
tiempo, dividir la “pantalla” en m´ltiples ´reas y tener
                                  u        a
     c´maras separadas para renderizar cada ´rea.
      a                                       a
El ViewPort es el ´rea desplegada en la ventana
                    a
(RenderWindow)
Luces
 Point: Emite luz desde si misma a cualquier
 direcci´n (una ampolleta).
        o
 SpotLight: Imita una linterna.
 Directorial: Simula por ejemplo la luz de la Luna,
 una luz lejana que proviene de una sola direcci´n
                                                o
 que abarca todo la escena
 Existen varias propiedades para las luces. Las m´s
                                                  a
 importantes son los colores diffuse y specular.
 Cada script de material define su comportamiento a
 estas caracter´ısticas de una luz.
Sombras
 Modulative Texture Shadow: De muy bajo costo
 computacional. Menos realista
 Modulative Stencil Shadow: Renderiza la sombra
 basada en el volumen del objeto.
 Additive Stencil Shadow: Renderiza cada luz por
 separado. De alto costo.
Cielos
             3 tipos
  SkyBoxes
SkyBoxes
    B´sicamente un cubo que rodea a todos los objetos en
     a
                        la escena.
1   mSceneMgr - > setSkyBox ( true , " Examples / SpaceSkyBox " ) ;
Ogre Game Engine
Cielos
             3 tipos
  SkyBoxes
  SkyDomes
SkyDomes
    Bastante similar a un SkyBox. La diferencia radica en
     que la textura es proyectada dentro del SkyBox de
                        forma esf´rica.
                                 e
1   mSceneMgr - > setSkyDome ( true , " Examples / CloudySky " ,5 ,8) ;


       3 Par´metro es la curvatura del Domo (2 a 65).
            a
       Menor para mejor efecto a la distancia. Altos para
       menor distorci´n y un efecto m´s suave.
                      o              a
       4 Par´metro es el n´mero de veces que la textura es
            a             u
       repetida en el Domo. Depende de la textura usada.
Ogre Game Engine
Cielos
              3 tipos
  SkyBoxes
  SkyDomes
  SkyPlanes
SkyPlane
    Un plano sobre el que se renderiza alguna textura. Al
     mirar 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 :: N EG AT I VE _U NI T _Y ;
5
6   mSceneMgr - > setSkyPlane ( true , plane , " Examples / SpaceSkyPlane " ,
        1500 , 75) ;


       4 Par´metro es el tama˜o del SkyPlane (1500x1500
            a                n
       unidades)
       5 Par´metro El n´mero de veces que la textura es
            a          u
       repetida.
Ogre Game Engine
Niebla
Es un filtro aplicado a los objetos no una entidad. Hay
       que preocuparse por el color del fondo.
  Lineal.
  Exponencial.
  Exponencial2.
Terrenos
        Pueden ser generados con un plano al que le
    asignamos una textura o utilizando un SceneManager
                      para terrenos.
1   mSceneMgr = mRoot - > getSceneManager ( ST_ EXT ERI OR_ CLOS E ) ;
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 objeto
              ResourceGroupManager
Podemos indicar de donde cargar los recursos con el
archivo 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
                      utilizaci´n.
                               o
Son cargados en tiempo de ejecuci´n.
                                   o
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 caracter´ısticas son manejadas v´ scripts,
                                         ıa
simples archivos de texto que pueden ser modificados
  provocando cambios inmediatos en la aplicaci´n.
                                               o
  Materiales
  Part´
      ıculas
  Compositores
  Overlay
  Fuentes
Materiales
   Define un material (el uso de una textura). Para
      identificarlos se utiliza la extension .material
El formato del script es pseudo-C++, con secciones
delimitadas por llaves y comentarios.
1   // Comentario
 2   material walls / funkywall1
 3   {
 4       // La tecnica a utilizar
 5       technique
 6       {
 7             // Primera pasada
 8           pass
 9           {
10                ambient 0.5 0.5 0.5 // respuesta a la luz
11                diffuse 1.0 1.0 1.0
12
13               // Comportamiento Textura 1
14               texture_unit
15               {
16                   texture wibbly . jpg
17                   scroll_anim 0.1 0.0
18                   wave_xform scale sine 0.0 0.7 0.0 1.0
19               }
20               // Comportamiento Textura 2
21               texture_unit
22               {
23                   texture wobbly . png
24                   rotate_anim 0.25
25                   colour_op add
26               }
27           }
28       }
29
30   }
Part´
    ıculas



Permiten definir sistemas de part´ıculas que ser´n
                                               a
utilizados como “templates”. Utilizan la extensi´n
                                                o
.particle para ser diferenciados
1       // Fader
 2       affector ColourFader
 3       {
 4           red -0.25
 5           green -0.25
 6           blue -0.25
 7       }
 8   }
 9
10   // A downpour
11   p ar ti cl e _s ystem Examples / Rain
12   {
13         material              Examples / Droplet
14         part icle_width 20
15         p ar ti cle_height 100
16         cull_each             true
17         quota                 10000
18         // Make common direction straight down ( faster than self oriented )
19         bill board_type oriented_common
20         c o m m o n _direction 0 -1 0
21
22       // Area emitter
23       emitter Box
24       {
25           angle              0
26           emission_rate      100
27           time_to_live       5
28           direction          0 -1 0
29           velocity      50
30           width              1000
31           height             1000
32           depth              0
33       }
34
35       // Gravity
Part´
        ıculas
1   Part icleSystem * Psys ;
2   pSys = mSceneMgr - > c r e a t e P a r t i c l e S y s t e m ( " Lluvia " , " Examples / Rain " ) ;
3   mNode - > attachObject ( pSys ) ; // Adjuntamos la particula para que se vea
Blender
  Blender es una herramienta open source para el
                   modelado 3D.
Permite crear mallas con texturas para renderizado o
                     animaci´n.
                            o

¿Porqu´ nos importa a nosotros?
      e
Con OGRE tenemos una herramienta de renderizado
pero necesitamos crear el contenido que mostraremos.
Herramientas
 OgreXmlConverter : Convierte un archivo xml a
 un binario de Ogre .mesh
 BlenderImport: Importa un mesh de Ogre a
 Blender
 Meshes Exporter: Exporta un dise˜o de blender a
                                     n
 Ogre (texturas, materiales, animaciones, etc)
 BlenderSceneExporter: Export una escena desde
 blender a formato dotScene (C´maras, Luces,
                                 a
 descripci´n de objetos)
          o
 dotScene Format: Un Framework para la carga de
 archivos dotScene dentro de Ogre.
Wrappers
Existen variados wrappers que podemos utilizar para
             crear aplicaciones OGRE:
 MOGRE un wrapper .Net
 http://www.ogre3d.org/tikiwiki/MOGRE
 Python-OGRE Interface basada en Py++.
 http://www.python-ogre.org/
 Ogre4j Permite utilizar las librer´ OGRE en
                                   ıas
 aplicaciones Java.
 http://www.ogre3d.org/tikiwiki/Ogre4j
M´s informaci´n
 a           o




www.ogre3d.org
www.blender.org
¿Preguntas?

Más contenido relacionado

DOCX
Blender
PPTX
Interfaz flash
PPTX
uAdventure: autoría de juegos serios de aventura + Gps + Ejemplos
PDF
Programación de Videojuegos con Python y Pilas (IX)
PDF
Programación de Videojuegos con Python y Pilas (X)
PDF
PDF
Vray 2.4 Guia Descriptiva
PDF
Perspectiva Digital
Blender
Interfaz flash
uAdventure: autoría de juegos serios de aventura + Gps + Ejemplos
Programación de Videojuegos con Python y Pilas (IX)
Programación de Videojuegos con Python y Pilas (X)
Vray 2.4 Guia Descriptiva
Perspectiva Digital

La actualidad más candente (19)

DOCX
DOCX
Primeros pasos con 3 ds max
DOCX
Vocabulario x3
PDF
Tutorial 1 3 d max vray -abr2013
DOC
Vray manual para interiores
PDF
Scratch manual basico
DOCX
Documento 3 d imax
PDF
Programación de Videojuegos con Python y Pilas (VIII)
PDF
Programación de Videojuegos con Python y Pilas (VI)
PPTX
Tema 1
PDF
Vray total manual
PDF
Stellarium Software Astronómico Presentación
PPTX
Elementos de la interfaz de flash.
PPTX
Diseño por computadora
DOCX
Manual de practicas segundo parcial
PPT
Tecnologia3 d
PPTX
Trabajo de programacion grafica
PDF
Programación de Videojuegos con Python y Pilas (V)
Primeros pasos con 3 ds max
Vocabulario x3
Tutorial 1 3 d max vray -abr2013
Vray manual para interiores
Scratch manual basico
Documento 3 d imax
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VI)
Tema 1
Vray total manual
Stellarium Software Astronómico Presentación
Elementos de la interfaz de flash.
Diseño por computadora
Manual de practicas segundo parcial
Tecnologia3 d
Trabajo de programacion grafica
Programación de Videojuegos con Python y Pilas (V)
Publicidad

Destacado (20)

ODP
Tecnicas SEO
PDF
20100506 JAX BPMN 2.0 in der Praxis
PDF
Open Source BPM - iteratec Architekturtag
PPTX
TDD com Python e App Engine
PPT
Adforallprsentation 100914100808 Phpapp02
PPTX
Python, Google App Engine e Webapp-CE
PPS
Pictures mix
PPTX
Performance im Fokus
PDF
коллекция Audi в миниатюре
PPSX
produção de games com tecnologia livre ou proprietária, Qual usar?
PDF
CAP 2: SEO - Técnicas de SEO
PPT
Aula de Risoto
PDF
Cloud Computing - Java no Google App Engine
PDF
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
PDF
Smart Industry
PDF
Communicating sustainibility
PDF
Google app engine para lean startups: the good, the bad and the ugly
PDF
Congreso visión 2012 - taller introducción app engine
PPTX
Introducción al desarrollo de videojuegos 2D con Wave Engine
PPTX
Linkbaiting - SEMSEO 2011
Tecnicas SEO
20100506 JAX BPMN 2.0 in der Praxis
Open Source BPM - iteratec Architekturtag
TDD com Python e App Engine
Adforallprsentation 100914100808 Phpapp02
Python, Google App Engine e Webapp-CE
Pictures mix
Performance im Fokus
коллекция Audi в миниатюре
produção de games com tecnologia livre ou proprietária, Qual usar?
CAP 2: SEO - Técnicas de SEO
Aula de Risoto
Cloud Computing - Java no Google App Engine
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Smart Industry
Communicating sustainibility
Google app engine para lean startups: the good, the bad and the ugly
Congreso visión 2012 - taller introducción app engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
Linkbaiting - SEMSEO 2011
Publicidad

Similar a Ogre Game Engine (20)

PDF
Introducción a las librerías PyGame y PyOpenGL
DOCX
3ds max 6
DOCX
Andres camilo cifuentes solano
DOC
Estela y naye
DOCX
Primeros pasos con 3ds max
PDF
Colegio nacional nicolás esguerra
PDF
Programación con Pygame IX
PDF
Unity next gen_&_scripting
DOCX
Proyecto 3 dsm
DOCX
Proyecto 3 dsm
DOCX
Colegio nacional nicolas esguerra
DOCX
DOCX
DOCX
Colegio nacional nicolas esguerra
PDF
Introducción a Unity 5 - Conceptos básicos de los videojuegos
PPTX
Trabajo de programacion grafica de torres bautista ines
DOCX
Primeros pasos con 3d max
DOCX
Primeros pasos
DOCX
Introducción a las librerías PyGame y PyOpenGL
3ds max 6
Andres camilo cifuentes solano
Estela y naye
Primeros pasos con 3ds max
Colegio nacional nicolás esguerra
Programación con Pygame IX
Unity next gen_&_scripting
Proyecto 3 dsm
Proyecto 3 dsm
Colegio nacional nicolas esguerra
Colegio nacional nicolas esguerra
Introducción a Unity 5 - Conceptos básicos de los videojuegos
Trabajo de programacion grafica de torres bautista ines
Primeros pasos con 3d max
Primeros pasos

Ogre Game Engine

  • 1. Desarrollo de Juegos en GNU/Linux “con OGRE” Comunidad Arch Linux Chile “D´ del Software Libre ıa 2010” Curic´ - 25 de septiembre de o 2010
  • 2. ¿Por que pensar en desarrollar Juegos?
  • 3. Por que nos gustan.
  • 4. Por que nos gustan. Por que se puede.
  • 5. Por que nos gustan. Por que se puede. Por que hace falta.
  • 7. Un motor de renderizado de gr´ficos. a
  • 8. Un motor de renderizado de gr´ficos. a Es un framework de desarrollo.
  • 9. Caracter´ ısticas de OGRE
  • 10. Caracter´ ısticas Escrito en C++ Orientado a escenas. Dise˜o completamente OO. n Soporte Direct3D y OpenGL
  • 11. Caracter´ ısticas Multiplataforma: GNU/Linux, OS X y WinSucks. Lenguaje de declaraci´n de materiales o Soporte para vertex shader. Soporte de texturas: PNG, JPEG, TGA, BMP, PVRTC o DDS. Soporte de texturas din´micas. a
  • 13. ¿Que podemos hacer con OGRE?
  • 18. Una im´gen vale m´s que mil a a palabras.... y un video?
  • 20. Dependencias Compilador y herramientas de configuraci´n o (automake, cmake, etc) OIS, freeimage, freetype, libzzip, libxaw, libxrandr doxygen, graphviz, nvidia-cg-toolkit, boost, cppunit (Opcionales)
  • 21. OGRE Obtener las ultimas fuentes: ´ http://www.ogre3d.org/download/source Configurar con cmake Compilar con make sudo make install
  • 22. Otras librerias Cegui ODE
  • 24. La raiz El objeto “Root” es el punto de entrada al sistema de OGRE. Debe ser el primer objeto creado y el ultimo en ser destruido. Permite configurar el sistema. (showConfigDialog()) Inicializa el sistema con las opciones determinadas por el usuario. Permite obtener punteros a otros objetos
  • 25. RenderSystem Es una clase abstracta que define la comunicaci´n o directa con el sistema de renderizado por medio de alguna API ej: D3DRenderSystem para Direct3D. Normalmente no es necesario manipular esta clase.
  • 26. Facilitemos las cosas para comenzar... utilicemos el Framework de Ejemplo que Ogre nos proporciona.
  • 27. Existen 3 clases fundamentales: SceneManager Entity SceneNode
  • 28. SceneManager Todo lo que aparece en pantalla es manejado por SceneManager. Mantiene la locaci´n de cada objeto en la escena. o Mantiene los datos sobre las c´maras de la escena. a Luces, Planos, etc. Hay multiples tipos. Para renderizar terrenos, mapas, etc.
  • 29. Entity Una entidad es el tipo de un objeto que puede ser renderizado en la escena. Un entidad es b´sicamente cualquier cosa que a pueda ser representado por una grilla 3D (mesh). Una cosa a notar es que OGRE separa los objetos renderizables por locaci´n y orientaci´n. o o Un entidad debe ir siempre atada a un SceneNode.
  • 30. SceneNode Mantiene informaci´n de locaci´n y orientaci´n de o o o todos los objetos atados a el (attached to). Este tipo de nodo no es un objeto que se “dibuje” en la escena. Puede contener un n´mero X de objetos atados. u La posici´n de un SceneNode es siempre relativa a o su SceneNode padre.
  • 31. Coordenadas y vectores Como muchos otros motores de renderizado, Ogre utilza el sigu- iente modelo de coordenadas Ogre cuenta con una clase: Vector que representa la posi- ci´n y direcci´n. Hay vectores o o definidos para 2, 3 y 4 dimen- siones (Vector2, Vector3 y Vec- tor4)
  • 32. 1 # include " T u t o r i a lA p p l i c a t i o n . h " 2 // Constructor 3 T u t o r i a l A p p l i c at i o n :: T u t o r i a l A pp l i c a t i o n ( void ) 4 { 5 } 6 // Destructor 7 T u t o r i a l A p p l i c at i o n ::~ T ut o r i a l A p p li c a t i o n ( void ) 8 { 9 } 10 11 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 12 void T u t o r i a l Ap p l i c a t i o n :: createScene ( void ) 13 { 14 // Creamos una entidad 15 Ogre :: Entity * ogreHead = mSceneMgr - > createEntity ( " Head " , " ogrehead . mesh " ) ; 16 17 // Creamos un SceneNode y atamos la entidad para que se muestre en la escena 18 Ogre :: SceneNode * headNode = mSceneMgr - > getRootSceneNode () -> c r e a t e C h i l d S c e n e N o d e () ; 19 headNode - > attachObject ( ogreHead ) ; 20 21 // Luz ambiente 22 mSceneMgr - > setAmbientLight ( Ogre :: ColourValue (0.5 , 0.5 , 0.5) ) ; 23 24 // Creamos una luz 25 Ogre :: Light * l = mSceneMgr - > createLight ( " MainLight " ) ; 26 l - > setPosition (20 ,80 ,50) ; // Posicionamos la luz 27 }
  • 34. C´maras a Una c´mara es lo que usamos para visualizar la escena a creada. Es un objeto especial parecido a un SceneNode. Posee como funciones: setPosition, yaw, roll y pitch Puede ser atada a cualquier SceneNode. Su posici´n es relativa a su padre. o Pueden existir m´ltiples c´maras pero solo se utiliza una cada vez. u a Para mostrar ciertas porciones de la escena se utilizan “camera holders”. Son SceneNodes que se posicionan en la escena y apuntan hacia donde la camera mira.
  • 35. ViewPorts Es posible tener m´ltiples SceneManagers al mismo u tiempo, dividir la “pantalla” en m´ltiples ´reas y tener u a c´maras separadas para renderizar cada ´rea. a a El ViewPort es el ´rea desplegada en la ventana a (RenderWindow)
  • 36. Luces Point: Emite luz desde si misma a cualquier direcci´n (una ampolleta). o SpotLight: Imita una linterna. Directorial: Simula por ejemplo la luz de la Luna, una luz lejana que proviene de una sola direcci´n o que abarca todo la escena Existen varias propiedades para las luces. Las m´s a importantes son los colores diffuse y specular. Cada script de material define su comportamiento a estas caracter´ısticas de una luz.
  • 37. Sombras Modulative Texture Shadow: De muy bajo costo computacional. Menos realista Modulative Stencil Shadow: Renderiza la sombra basada en el volumen del objeto. Additive Stencil Shadow: Renderiza cada luz por separado. De alto costo.
  • 38. Cielos 3 tipos SkyBoxes
  • 39. SkyBoxes B´sicamente un cubo que rodea a todos los objetos en a la escena. 1 mSceneMgr - > setSkyBox ( true , " Examples / SpaceSkyBox " ) ;
  • 41. Cielos 3 tipos SkyBoxes SkyDomes
  • 42. SkyDomes Bastante similar a un SkyBox. La diferencia radica en que la textura es proyectada dentro del SkyBox de forma esf´rica. e 1 mSceneMgr - > setSkyDome ( true , " Examples / CloudySky " ,5 ,8) ; 3 Par´metro es la curvatura del Domo (2 a 65). a Menor para mejor efecto a la distancia. Altos para menor distorci´n y un efecto m´s suave. o a 4 Par´metro es el n´mero de veces que la textura es a u repetida en el Domo. Depende de la textura usada.
  • 44. Cielos 3 tipos SkyBoxes SkyDomes SkyPlanes
  • 45. SkyPlane Un plano sobre el que se renderiza alguna textura. Al mirar 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 :: N EG AT I VE _U NI T _Y ; 5 6 mSceneMgr - > setSkyPlane ( true , plane , " Examples / SpaceSkyPlane " , 1500 , 75) ; 4 Par´metro es el tama˜o del SkyPlane (1500x1500 a n unidades) 5 Par´metro El n´mero de veces que la textura es a u repetida.
  • 47. Niebla Es un filtro aplicado a los objetos no una entidad. Hay que preocuparse por el color del fondo. Lineal. Exponencial. Exponencial2.
  • 48. Terrenos Pueden ser generados con un plano al que le asignamos una textura o utilizando un SceneManager para terrenos. 1 mSceneMgr = mRoot - > getSceneManager ( ST_ EXT ERI OR_ CLOS E ) ; 2 mSceneMgr - > setWorldGeometry ( " terrain . cfg " ) ;
  • 49. Recursos Son los objetos reusables de los que disponemos: Mallas Texturas Scripts (Materiales, Particulas, etc) La carga de estos es realizada por el objeto ResourceGroupManager Podemos indicar de donde cargar los recursos con el archivo resources.cfg
  • 50. 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
  • 51. 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 utilizaci´n. o Son cargados en tiempo de ejecuci´n. o
  • 52. 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
  • 53. Scripts Muchas caracter´ısticas son manejadas v´ scripts, ıa simples archivos de texto que pueden ser modificados provocando cambios inmediatos en la aplicaci´n. o Materiales Part´ ıculas Compositores Overlay Fuentes
  • 54. Materiales Define un material (el uso de una textura). Para identificarlos se utiliza la extension .material El formato del script es pseudo-C++, con secciones delimitadas por llaves y comentarios.
  • 55. 1 // Comentario 2 material walls / funkywall1 3 { 4 // La tecnica a utilizar 5 technique 6 { 7 // Primera pasada 8 pass 9 { 10 ambient 0.5 0.5 0.5 // respuesta a la luz 11 diffuse 1.0 1.0 1.0 12 13 // Comportamiento Textura 1 14 texture_unit 15 { 16 texture wibbly . jpg 17 scroll_anim 0.1 0.0 18 wave_xform scale sine 0.0 0.7 0.0 1.0 19 } 20 // Comportamiento Textura 2 21 texture_unit 22 { 23 texture wobbly . png 24 rotate_anim 0.25 25 colour_op add 26 } 27 } 28 } 29 30 }
  • 56. Part´ ıculas Permiten definir sistemas de part´ıculas que ser´n a utilizados como “templates”. Utilizan la extensi´n o .particle para ser diferenciados
  • 57. 1 // Fader 2 affector ColourFader 3 { 4 red -0.25 5 green -0.25 6 blue -0.25 7 } 8 } 9 10 // A downpour 11 p ar ti cl e _s ystem Examples / Rain 12 { 13 material Examples / Droplet 14 part icle_width 20 15 p ar ti cle_height 100 16 cull_each true 17 quota 10000 18 // Make common direction straight down ( faster than self oriented ) 19 bill board_type oriented_common 20 c o m m o n _direction 0 -1 0 21 22 // Area emitter 23 emitter Box 24 { 25 angle 0 26 emission_rate 100 27 time_to_live 5 28 direction 0 -1 0 29 velocity 50 30 width 1000 31 height 1000 32 depth 0 33 } 34 35 // Gravity
  • 58. Part´ ıculas 1 Part icleSystem * Psys ; 2 pSys = mSceneMgr - > c r e a t e P a r t i c l e S y s t e m ( " Lluvia " , " Examples / Rain " ) ; 3 mNode - > attachObject ( pSys ) ; // Adjuntamos la particula para que se vea
  • 59. Blender Blender es una herramienta open source para el modelado 3D. Permite crear mallas con texturas para renderizado o animaci´n. o ¿Porqu´ nos importa a nosotros? e Con OGRE tenemos una herramienta de renderizado pero necesitamos crear el contenido que mostraremos.
  • 60. Herramientas OgreXmlConverter : Convierte un archivo xml a un binario de Ogre .mesh BlenderImport: Importa un mesh de Ogre a Blender Meshes Exporter: Exporta un dise˜o de blender a n Ogre (texturas, materiales, animaciones, etc) BlenderSceneExporter: Export una escena desde blender a formato dotScene (C´maras, Luces, a descripci´n de objetos) o dotScene Format: Un Framework para la carga de archivos dotScene dentro de Ogre.
  • 61. Wrappers Existen variados wrappers que podemos utilizar para crear aplicaciones OGRE: MOGRE un wrapper .Net http://www.ogre3d.org/tikiwiki/MOGRE Python-OGRE Interface basada en Py++. http://www.python-ogre.org/ Ogre4j Permite utilizar las librer´ OGRE en ıas aplicaciones Java. http://www.ogre3d.org/tikiwiki/Ogre4j
  • 62. M´s informaci´n a o www.ogre3d.org www.blender.org