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
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.
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.
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.
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
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.
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