Post on 07-Apr-2016
Equipe:
Durval AugustoElton MagalhãesDihego OliveiraNatanael SilvaRafael AraujoVladimir Alves
Introdução a Multimídia
Estudo sobre OGREObject Oriented Graphics Rendering Engine
Introdução à Multimídia - UFPE/CIn
OGRE – Object Oriented Graphics Rendering Engine
Engine 3D; Flexível; Escrito em C++; Une facilidade com poder; É gratuito.
2
Introdução à Multimídia - UFPE/CIn
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.
3
Introdução à Multimídia - UFPE/CIn
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.
4
Introdução à Multimídia - UFPE/CIn
Projetos que utilizam o OGRE.
JetRacer Live Interior 3D
5
Introdução à Multimídia - UFPE/CIn
Projetos que utilizam o OGRE[2].
FirstAid Sim Interactive Museum
6
Introdução à Multimídia - UFPE/CIn
Projetos que utilizam o OGRE[3].
Nimble MotorM4X
7
Arquitetura
Introdução à Multimídia - UFPE/CIn 8
Introdução à Multimídia - UFPE/CIn
ArquiteturaSceneManager
Responsável por desenhar cenas e objetos;SceneNode
Encapsula posicionamento e objetos da cena;
EntityQualquer elemento com uma malha (mesh);
RootSceneNode especial. Usa padrão Singleton.
9
Introdução à Multimídia - UFPE/CIn
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().
10
Introdução à Multimídia - UFPE/CIn
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
11
Introdução à Multimídia - UFPE/CIn
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.
12
Introdução à Multimídia - UFPE/CIn
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.
13
Introdução à Multimídia - UFPE/CIn
EntityPodem 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 SubEntityUm mesh de um carro como Entity;Os pneus com SubEntitys se movimentando
junto com o carro.
14
Entity - Mesh
Introdução à Multimídia - UFPE/CIn 15
Introdução à Multimídia - UFPE/CIn
Coordenadas e Vetores 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
Não há uma classe para representar um ponto
y
z
x
16
Introdução à Multimídia - UFPE/CIn
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);
17
Introdução à Multimídia - UFPE/CIn
RotaçãoRotaciona um objeto
Em torno do eixo XUsando 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) );
18
Introdução à Multimídia - UFPE/CIn
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.
19
Introdução à Multimídia - UFPE/CIn
O que são Scripts?[1]
Simples arquivos de texto que fazem calls a engine de Ogre, de alguns recursos por ela suportadosFacilidade e rapidez no desenvolvimentoPermite reuso, sem ligação a um particular
código fonte
20
Introdução à Multimídia - UFPE/CIn
O que são Scripts?[2]
Sem necessidade de recompilação do código quando parâmetros são mudados, o script simplesmente é relidoTestes mais rápidos;Código mais claro.
21
Introdução à Multimídia - UFPE/CIn
Scripts OGRE.
Initialization Scripts; Material Scripts;Particle Scripts;Overlay Scripts; Font Definition Scripts.
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).
23Introdução à Multimídia - UFPE/CIn
Introdução à Multimídia - UFPE/CIn
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.
24
Introdução à Multimídia - UFPE/CIn
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).
25
Material Scripts[3/3]
26Introdução à Multimídia - UFPE/CIn
Introdução à Multimídia - UFPE/CIn
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.
27
Particle Scripts[2/2]
28Introdução à Multimídia - UFPE/CIn
Introdução à Multimídia - UFPE/CIn
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.
29
Introdução à Multimídia - UFPE/CIn
Overlay Scripts [2/3]
Único Overlay com dois panels
30
Introdução à Multimídia - UFPE/CIn
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].
31
Introdução à Multimídia - UFPE/CIn
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).
32
Font Definition Scripts [2/2]
<font_name> { type <image | truetype> source <image file | truetype font file> ... ... custom attributes depending on type }
33Introdução à Multimídia - UFPE/CIn
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.
34Introdução à Multimídia - UFPE/CIn
Introdução à Multimídia - UFPE/CIn
Exemplo Ogre oferece por padrão um mostrador da taxa de frame.
35
Introdução à Multimídia - UFPE/CIn
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().
36
Classe OverlayElementTodo 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.37Introdução à Multimídia - UFPE/CIn
Introdução à Multimídia - UFPE/CIn
OverlayManagerUtilizado 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.
38
Introdução à Multimídia - UFPE/CIn
Pixel Mode / Relative Mode;Alinhamento;Posição/tamanho;Material;Caption;Transformando Overlays -> Overlay :: scroll,
Overlay :: rotate, Overlay :: scale.
Atributos:
39
InterfaceOverlays foram
feitos para elementos não interativos;
Para criar GUIs -> http://www.cegui.org.uk.
40Introdução à Multimídia - UFPE/CIn
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-TextureRender-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