ogre game engine
TRANSCRIPT
-
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?