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