Introdução a Multimídia
Estudo sobre OGRE
Object Oriented Graphics Rendering Engine
Equipe:
Durval Augusto
Elton Magalhães
Dihego Oliveira
Natanael Silva
Rafael Araujo
Vladimir Alves
OGRE – Object Oriented Graphics
Rendering Engine
Engine 3D;
Flexível;
Escrito em C++;
Une facilidade com poder;
É gratuito.
Introdução à Multimídia - UFPE/CIn
2
Não é um engine de jogos.
OGRE é muito usado como módulo gráfico em jogos;
Decisão de restringir para abranger;
Liberdade ao desenvolvedor – engines de jogos
geralmente são específicos;
Flexibilidade: de aplicações médicas a jogos.
Introdução à Multimídia - UFPE/CIn
3
O que faz de OGRE uma boa
opção?
Fácil integração com módulos externos – grande
aceitação em jogos;
Documentação consistente;
Qualidade favorecida à quantidade.
Introdução à Multimídia - UFPE/CIn
4
Projetos que utilizam o OGRE.
JetRacer
Live Interior 3D
Introdução à Multimídia - UFPE/CIn
5
Projetos que utilizam o OGRE[2].
FirstAid Sim
Interactive Museum
Introdução à Multimídia - UFPE/CIn
6
Projetos que utilizam o OGRE[3].
Nimble
MotorM4X
Introdução à Multimídia - UFPE/CIn
7
Arquitetura
Introdução à Multimídia - UFPE/CIn
8
Arquitetura
SceneManager
Responsável por desenhar cenas e objetos;
SceneNode
Encapsula posicionamento e objetos da cena;
Entity
Qualquer elemento com uma malha (mesh);
Root
SceneNode especial. Usa padrão Singleton.
Introdução à Multimídia - UFPE/CIn
9
Root
Ponto de partida da aplicação. Todos os objetos são
atingíveis deste objeto;
Acesso aos fundamentos do sistema
Sistemas de renderização;
Acesso às demais classes do sistema;
Deve ser construído antes de chamar qualquer
operação do sistema Ogre.
Depois de instanciado pode ser acessado por:
Root :: getSingleton() ou Root :: getSingletonPtr().
Introdução à Multimídia - UFPE/CIn
10
SceneManager
É uma abstração representando o que é mostrado no
mundo virtual;
Responsável por iterar sobre os objetos que contém e
desenhá-los na tela;
Pode ser de vários tipos:
ST_GENERIC
ST_EXTERIOR_CLOSE
ST_EXTERIOR_FAR
ST_EXTERIOR_REAL_FAR
ST_INTERIOR
Introdução à Multimídia - UFPE/CIn
11
SceneNode
Contém instâncias da classe Entity;
Agrupam objetos sem malhas, como luzes, sombras,
câmeras e partículas;
Podem possuir SceneNodes filhos, gerando assim uma
hierarquia de cenas;
Possuem sua posição sempre relativa ao SceneNode
pai.
Introdução à Multimídia - UFPE/CIn
12
Entity
Podem ser imaginados como os objetos 3D com malha
(mesh) que devem ser desenhados na tela;
São os objetos propriamente renderizáveis na cena;
Deve ser adicionado a um SceneNode para adquirir a
informação de posicionamento e orientação.
Introdução à Multimídia - UFPE/CIn
13
Entity
Podem possuir SubEntity
Se qualquer operação que mudar a orientação ou
coordenadas da Entity pai for efetuada, as
SubEntitys sofrerão modificações;
São exemplos de Entity e SubEntity
Um mesh de um carro como Entity;
Os pneus com SubEntitys se movimentando junto
com o carro.
Introdução à Multimídia - UFPE/CIn
14
Entity - Mesh
Introdução à Multimídia - UFPE/CIn
15
Coordenadas e Vetores
y
Sistema de Coordenas Canônicas
X e Z plano horizontal
Y eixo vertical
Classe Vector
Origem em (0,0,0)
Responsável pela representação:
Posição e Direção
Dimensões
2 – Classe Vector2
3 – Classe Vector3
4 – Classe Vector4
x
z
Não há uma classe para representar um ponto
Introdução à Multimídia - UFPE/CIn
16
Redimensionamento
Redimensionando um objeto
sceneNode->scale(x, y, z);
sceneNode->scale( Vector(x, y, z));
Exemplo:
Funciona de maneira proporcional a escala já
existente
Ex:
sceneNode->scale(3, 2, 4);
sceneNode->scale(0.3, 0.7, 0.5);
Introdução à Multimídia - UFPE/CIn
17
Rotação
Rotaciona um objeto
Em torno do eixo X
Usando o método pitch:
SceneNode->pitch( Degree ( x ) );
Usando o método yaw
SceneNode->yaw( Degree ( y ) );
Usando o método roll
SceneNode->roll( Degree ( z ) );
Rotacionando em um eixo qualquer
SceneNode->rotate( Vector (x,y,z) );
Introdução à Multimídia - UFPE/CIn
18
Rotação
Exemplos de Uso:
Usa-se pitch para rotacionar para cima ou para baixo do
eixo x
Ex: quando se está voando com um jato;
Ex: quando se está dirigindo um carro para subir ou
descer uma colina;
Usa-se o yaw para rotacionar para esquerda ou direita em
torno do eixo y
Ex: quando se está dirigindo um carro.
Usa-se o roll para rotacionar de forma inclinada, em torno
do eixo z.
Ex: O que acontece com o carro quando se tira de uma
curva demasiadamente rápida.
Introdução à Multimídia - UFPE/CIn
19
O que são Scripts?[1]
Simples arquivos de texto que fazem calls a engine de
Ogre, de alguns recursos por ela suportados
Facilidade e rapidez no desenvolvimento
Permite reuso, sem ligação a um particular código fonte
Introdução à Multimídia - UFPE/CIn
20
O que são Scripts?[2]
Sem necessidade de recompilação do código quando
parâmetros são mudados, o script simplesmente é
relido
Testes mais rápidos;
Código mais claro.
Introdução à Multimídia - UFPE/CIn
21
Scripts OGRE.
Initialization Scripts;
Material Scripts;
Particle Scripts;
Overlay Scripts;
Font Definition Scripts.
Introdução à Multimídia - UFPE/CIn
22
Initialization Scripts
Definição dos paths necessários a aplicação(ogre.cfg);
Load dos plugins(plugins.cfg);
path folders de outros scripts e demais
recursos(resources.cfg).
Introdução à Multimídia - UFPE/CIn
23
Material Scripts[1/3]
Definição simples e rápida de materiais complexos;
Podemos, para facilitar o entendimento, definir mais
de um material dentro de um único file `.material`,
aconselha-se que estes guardem uma relação
semântica entre si.
Introdução à Multimídia - UFPE/CIn
24
Material Scripts[2/3]
Estrutura
Material;
Technique;
Pass;
Texture_unit;
Technique é a mais relevante pois define o path para se
obter um dado efeito, sua ordem é importante
(different environments).
Introdução à Multimídia - UFPE/CIn
25
Material Scripts[3/3]
Introdução à Multimídia - UFPE/CIn
26
Particle Scripts[1/2]
Definição de sistemas de partículas independente do
source program;
Esses scripts são carregados no momento da
inicialização da aplicação.
Introdução à Multimídia - UFPE/CIn
27
Particle Scripts[2/2]
Introdução à Multimídia - UFPE/CIn
28
Overlay Scripts [1/3]
Definição de overlays em um script;
Abre possibilidade de reuso;
Carregado pelo sistema durante sua inicialização;
Único script pode conter vários overlays;
Dentro do overlay podem existir vários elementos 2D e
3D.
Introdução à Multimídia - UFPE/CIn
29
Overlay Scripts [2/3]
Único
Overlay com
dois panels
Introdução à Multimídia - UFPE/CIn
30
Overlay Scripts [3/3]
Formas padrão
Panel e BorderPanel são containers;
TextArea, TextBox são elements;
BorderPanel[tamanho das bordas, material usado];
TextArea[nome da fonte, cor e altura dos
caracteres];
TextBox [TextArea e um Panel de fundo].
Introdução à Multimídia - UFPE/CIn
31
Font Definition Scripts [1/2]
Ogre usa textura baseda em fontes para renderizar a
TextAreaOverlayElement;
Podemos usar também o Font Object para esta tarefa;
Existem dois caminhos para indicar a fonte a OGRE
Desenvolva a textura da fonte você mesmo usando
algum pacote de auxílio ou uma ferramenta de geração
automática;
Deixe Ogre gerar a fonte baseado na truetype
font(melhor performance).
Introdução à Multimídia - UFPE/CIn
32
Font Definition Scripts [2/2]
<font_name> {
type <image | truetype>
source <image file | truetype font file>
...
... custom attributes depending on type
}
Introdução à Multimídia - UFPE/CIn
33
Overlays
São utilizados para exibir na tela elementos 2D ou 3D
sobre o conteúdo;
Normal;
Head-up Displays (HUDs);
Menu;
Status;
Painéis.
Introdução à Multimídia - UFPE/CIn
34
Exemplo
Ogre oferece por
padrão um
mostrador da taxa
de frame.
Introdução à Multimídia - UFPE/CIn
35
Criação
Através de código ou scripts;
Código: SceneManager :: createOverlay;
Porém, scripts são mais utilizados;
Overlays são exibidos após o método ‘show()’;
Overlays são exibidos uns sobre os outros, respeitando
a ordem de definida através de Overlay :: setZOrder().
Introdução à Multimídia - UFPE/CIn
36
Classe OverlayElement
Todo item que pode ser incluído a um overlay, é
derivado desta classe;
Usuários devem criar suas próprias subclasses;
Atributos comuns: Tamanho, posição, material, etc...
Subclasse nativa do ogre: OverlayContainer -> pode
conter outros OverlayElements, agrupando-os.
Provê sistema de coordenadas local.
Introdução à Multimídia - UFPE/CIn
37
OverlayManager
Utilizado quando se deseja criar elementos 2D e
acrescentar a um Overlay (ou container);
Ex: OverlayManager :: getSingleton().createOverlayElement("Panel“,
"myNewPanel");
Para adicionar elementos a um overlay: Overlay::add2D.
Apenas Containers podem ser adicionados
diretamente a um Overlay, estabelecendo a ordem que
seu conteúdo irá ser exibido;
OverlayContainer :: addChild
-> adiciona elementos (ou containers) a
um container.
Introdução à Multimídia - UFPE/CIn
38
Atributos:
Pixel Mode / Relative Mode;
Alinhamento;
Posição/tamanho;
Material;
Caption;
Transformando Overlays -> Overlay :: scroll, Overlay ::
rotate, Overlay :: scale.
Introdução à Multimídia - UFPE/CIn
39
Interface
Overlays foram feitos
para elementos não
interativos;
Para criar GUIs ->
http://www.cegui.org.uk.
Introdução à Multimídia - UFPE/CIn
40
Ambiente de desenvolvimento.
A instalação do SDK (Software Development Kit) pré-
compilado é feita de maneira bastante intuitiva e
rápida (através de um wizard);
Ao fim do processo, um diretório é criado contendo as
bibliotecas e os arquivos de cabeçalho necessários para
desenvolver as aplicações.
Introdução à Multimídia - UFPE/CIn
41
Ambiente de desenvolvimento.
Introdução à Multimídia - UFPE/CIn
42
Ambiente de desenvolvimento.
Após a instalação, o wizard cria uma variável de
ambiente chamada OGRE_HOME que contém o
caminho do diretório onde o SDK foi instalado;
A IDE utilizada é o Visual C++ 2003;
É necessário ainda o download de algumas bibliotecas
que são pré-requisitos para a compilação do OGRE e
das suas ferramentas;
O OGRE também tem como pré-requisito a instalação
do DirectX 9.0.
Introdução à Multimídia - UFPE/CIn
43
Inicialização de Scripts
Fazem parte dos scripts de inicialização os arquivos
“plugins.cfg”, “ogre.cfg” e “resources.cfg”;
Eles são responsáveis, respectivamente, pelo
carregamento dos plugins, autopreenchimento das
opções de configuração e definição de caminhos para
os recursos utilizados pela aplicação.
Introdução à Multimídia - UFPE/CIn
44
Inicialização de Scripts.
Cada arquivo tem seu formato específico. No caso do
arquivo “plugins.cfg” existe uma configuração
chamada de PluginFolder, que aponta para a pasta
onde estarão localizados todos os plugins listados no
arquivo;
O arquivo “resources.cfg” é formado de diretivas Zip e
FileSystem, que apontam respectivamente para
arquivos compactados no formato zip e para pastas
onde o OGRE procurará por mais arquivos de scripts e
recursos utilizados na aplicação.
Introdução à Multimídia - UFPE/CIn
45
Facilidades oferecidas pelo
OGRE.
Elas estão descritas em três subseções intituladas
Geração de Sombras, Render-to-Texture e Mouse
Picking;
Aplicações mais agradáveis para o usuário, tanto do
ponto de vista visual quanto do de interação;
Geração de sombras é um aspecto importante na
busca pelo realismo de uma cena, pois ajuda na
percepção da distância entre os objetos.
Introdução à Multimídia - UFPE/CIn
46
Facilidades do OGRE.
Geração de Sombras
OGRE suporta três tipos de cálculos de sombra:
Texture Modulative, Stencil Modulative, Stencil
Additive;
Render-to-Texture
Render-to-Texture consiste numa técnica para
renderizar cenas em texturas que são utilizadas em
materiais para torná-los reflexivos.
Introdução à Multimídia - UFPE/CIn
47
Facilidades do OGRE.
Mouse Picking
Uma rotina bastante comum em aplicativos 3D é a
seleção de objetos da cena utilizando o mouse, a qual é
denominada Picking;
Picking padrão implementado no OGRE detecta os
objetos com base no AxisAlignedBox dos objetos, o que
faz com que os resultados sejam imprecisos, porém
rápidos.
Introdução à Multimídia - UFPE/CIn
48
Facilidades do OGRE.
Um AxisAlignedBox é um tipo de BoudingBox que
sempre está alinhado com o eixo de coordenadas do
mundo, assim, mesmo que os objetos sejam
rotacionados seus BoudingBoxes continuarão
alinhados;
Se a aplicação requisitar uma forma mais acurada de
Picking, esta deverá ser implementada pelo
desenvolvedor.
Introdução à Multimídia - UFPE/CIn
49
Dúvidas?
Introdução à Multimídia - UFPE/CIn
50