SlideShare a Scribd company logo
1 of 63
Download to read offline
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
¿Que podemos hacer con
OGRE?
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   }
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 " ) ;
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.
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.
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?

More Related Content

What's hot

Primeros pasos con 3 ds max
Primeros pasos con 3 ds maxPrimeros pasos con 3 ds max
Primeros pasos con 3 ds maxFredy Moyano
 
Vocabulario x3
Vocabulario x3Vocabulario x3
Vocabulario x3Tadeo Rmz
 
Tutorial 1 3 d max vray -abr2013
Tutorial 1 3 d max   vray -abr2013Tutorial 1 3 d max   vray -abr2013
Tutorial 1 3 d max vray -abr2013Guillermo De Leon
 
Vray manual para interiores
Vray manual para interioresVray manual para interiores
Vray manual para interioresAdrian M.
 
Scratch manual basico
Scratch manual basicoScratch manual basico
Scratch manual basicodahil2011
 
Documento 3 d imax
Documento 3 d imaxDocumento 3 d imax
Documento 3 d imaxJOEIAO
 
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Fernando Salamero
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Fernando Salamero
 
Stellarium Software Astronómico Presentación
Stellarium Software Astronómico PresentaciónStellarium Software Astronómico Presentación
Stellarium Software Astronómico PresentaciónJose Perez
 
Elementos de la interfaz de flash.
Elementos de la interfaz de flash.Elementos de la interfaz de flash.
Elementos de la interfaz de flash.Gerardo Espinosa
 
Diseño por computadora
Diseño por computadoraDiseño por computadora
Diseño por computadoraAriel Medina
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcialGuillermo Mendoza
 
Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Fernando Salamero
 

What's hot (19)

Nicolas esguerra
Nicolas esguerraNicolas esguerra
Nicolas esguerra
 
Primeros pasos con 3 ds max
Primeros pasos con 3 ds maxPrimeros pasos con 3 ds max
Primeros pasos con 3 ds max
 
Vocabulario x3
Vocabulario x3Vocabulario x3
Vocabulario x3
 
Tutorial 1 3 d max vray -abr2013
Tutorial 1 3 d max   vray -abr2013Tutorial 1 3 d max   vray -abr2013
Tutorial 1 3 d max vray -abr2013
 
Vray manual para interiores
Vray manual para interioresVray manual para interiores
Vray manual para interiores
 
Scratch manual basico
Scratch manual basicoScratch manual basico
Scratch manual basico
 
Documento 3 d imax
Documento 3 d imaxDocumento 3 d imax
Documento 3 d imax
 
Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)Programación de Videojuegos con Python y Pilas (VIII)
Programación de Videojuegos con Python y Pilas (VIII)
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 
Tema 1
Tema 1Tema 1
Tema 1
 
Vray total manual
Vray total manualVray total manual
Vray total manual
 
Stellarium Software Astronómico Presentación
Stellarium Software Astronómico PresentaciónStellarium Software Astronómico Presentación
Stellarium Software Astronómico Presentación
 
Elementos de la interfaz de flash.
Elementos de la interfaz de flash.Elementos de la interfaz de flash.
Elementos de la interfaz de flash.
 
Diseño por computadora
Diseño por computadoraDiseño por computadora
Diseño por computadora
 
Manual de practicas segundo parcial
Manual de practicas segundo parcialManual de practicas segundo parcial
Manual de practicas segundo parcial
 
3d1
3d13d1
3d1
 
Tecnologia3 d
Tecnologia3 dTecnologia3 d
Tecnologia3 d
 
Trabajo de programacion grafica
Trabajo de programacion graficaTrabajo de programacion grafica
Trabajo de programacion grafica
 
Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)Programación de Videojuegos con Python y Pilas (V)
Programación de Videojuegos con Python y Pilas (V)
 

Viewers also liked

Tecnicas SEO
Tecnicas SEOTecnicas SEO
Tecnicas SEObluekiu
 
Open Source BPM - iteratec Architekturtag
Open Source BPM - iteratec ArchitekturtagOpen Source BPM - iteratec Architekturtag
Open Source BPM - iteratec Architekturtagcamunda services GmbH
 
TDD com Python e App Engine
TDD com Python e App EngineTDD com Python e App Engine
TDD com Python e App EngineRicardo Bánffy
 
Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02Adforallprsentation 100914100808 Phpapp02
Adforallprsentation 100914100808 Phpapp02fabrice_TALAZAC
 
Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Python, Google App Engine e Webapp-CE
Python, Google App Engine e Webapp-CE Renzo Nuccitelli
 
Performance im Fokus
Performance im FokusPerformance im Fokus
Performance im FokusInxmail GmbH
 
коллекция Audi в миниатюре
коллекция Audi в миниатюреколлекция Audi в миниатюре
коллекция Audi в миниатюреVag-Express
 
produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?produção de games com tecnologia livre ou proprietária, Qual usar?
produção de games com tecnologia livre ou proprietária, Qual usar?Renan Nespolo
 
CAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEOCAP 2: SEO - Técnicas de SEO
CAP 2: SEO - Técnicas de SEOGary Briceño
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AGWas User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AG
Was User lieben, was sie hassen - Gregor Urech, Sibylle Peuker, Zeix AGONE Schweiz
 
Google app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the uglyGoogle app engine para lean startups: the good, the bad and the ugly
Google app engine para lean startups: the good, the bad and the uglyPET Computação
 
Congreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineCongreso visión 2012 - taller introducción app engine
Congreso visión 2012 - taller introducción app engineNigeŗ Arce
 
Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineEduard Tomàs
 
Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011Linkbaiting - SEMSEO 2011
Linkbaiting - SEMSEO 2011get on top gmbh
 

Viewers also liked (20)

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

Similar to Ogre Game Engine

Similar to Ogre Game Engine (20)

Introducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGLIntroducción a las librerías PyGame y PyOpenGL
Introducción a las librerías PyGame y PyOpenGL
 
3ds max 6
3ds max 63ds max 6
3ds max 6
 
3ds max 6
3ds max 63ds max 6
3ds max 6
 
Andres camilo cifuentes solano
Andres camilo cifuentes solanoAndres camilo cifuentes solano
Andres camilo cifuentes solano
 
Estela y naye
Estela y nayeEstela y naye
Estela y naye
 
Primeros pasos con 3ds max
Primeros pasos con 3ds maxPrimeros pasos con 3ds max
Primeros pasos con 3ds max
 
Colegio nacional nicolás esguerra
Colegio nacional nicolás esguerraColegio nacional nicolás esguerra
Colegio nacional nicolás esguerra
 
Programación con Pygame IX
Programación con Pygame IXProgramación con Pygame IX
Programación con Pygame IX
 
Unity next gen_&_scripting
Unity next gen_&_scriptingUnity next gen_&_scripting
Unity next gen_&_scripting
 
Proyecto 3 dsm
Proyecto 3 dsmProyecto 3 dsm
Proyecto 3 dsm
 
Proyecto 3 dsm
Proyecto 3 dsmProyecto 3 dsm
Proyecto 3 dsm
 
Colegio nacional nicolas esguerra
Colegio nacional nicolas esguerraColegio nacional nicolas esguerra
Colegio nacional nicolas esguerra
 
3d max
3d max3d max
3d max
 
3d max
3d max3d max
3d max
 
Colegio nacional nicolas esguerra
Colegio nacional nicolas esguerraColegio nacional nicolas esguerra
Colegio nacional nicolas esguerra
 
Introducción a Unity 5 - Conceptos básicos de los videojuegos
Introducción a Unity 5 - Conceptos básicos de los videojuegosIntroducción a Unity 5 - Conceptos básicos de los videojuegos
Introducción a Unity 5 - Conceptos básicos de los videojuegos
 
Trabajo de programacion grafica de torres bautista ines
Trabajo de programacion grafica de torres bautista inesTrabajo de programacion grafica de torres bautista ines
Trabajo de programacion grafica de torres bautista ines
 
Primeros pasos con 3d max
Primeros pasos con 3d maxPrimeros pasos con 3d max
Primeros pasos con 3d max
 
Primeros pasos
Primeros pasosPrimeros pasos
Primeros pasos
 
3d max
3d max3d max
3d max
 

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
  • 12.
  • 13. ¿Que podemos hacer con OGRE?
  • 14.
  • 15.
  • 16.
  • 17.
  • 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 }
  • 33.
  • 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 " ) ;
  • 40.
  • 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.
  • 43.
  • 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.
  • 46.
  • 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