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
Download

OgreT