sábado, 22 de outubro de 2011

Conceitos Básicos do OGRE

Orientação a Objetos

Como o nome já diz, OGRE é uma engine gráfica orientada a objetos. Vamos, agora, tentar entender o porquê da escolha dessa abordagem.
Atualmente, engines gráficas são como qualquer outro grande sistema de software. Elas começam pequenas mas logo se expandem a monstruosas e complexas bestas que não podem ser completamente compreendidas e aprendidas do dia pra noite. 
É muito difícil gerenciar sistemas desse tamanho e mais difícil ainda fazer modificações confiáveis, o que é muito importante num campo em que novas técnicas e abordagens aparecem quase toda semana. Projetar sistemas com arquivos enormes cheios de funções escritas em C não ameniza o problema - ainda que o código todo fosse escrito por uma pessoa só (o que é improvável), ela ainda teria dificuldade de se encontrar em meio a tantas linhas de código.
Orientação a objetos é uma abordagem muito popular para resolver o problema da complexidade. Está um passo além de decompor o programa em funções separadas: funções e dados de estado (atributos) são agrupados em classes que representam conceitos do mundo real. 
Isso permite abstrair a complexidade em pacotes facilmente reconhecíveis com uma interface conceitual simples que podem ser "montados" depois. Também é possível organizar esses pacotes de modo que diferentes deles possuam uma mesma interface mas sejam implementados distintamente. Assim, o programador só precisa trabalhar com uma interface bem conhecida.
Orientação a objetos (OO) é um tópico extenso que é tratado em muitos livros. Não é possível que seja contemplado de maneira suficientemente abrangente em uma única postagem. Mesmo assim, suas vantagens na utilização para desenvolvimento de engines gráficas são notórias e devem ser observadas - como mencionadas nos parágrafos anteriores.
Uma crítica ferrenha à abordagem orientada a objetos é sua suposta perca de desempenho em relação ao paradigma tradicional de programação (estruturada / procedural). Alguns acham que essa suposta desvantagem é motivo suficiente para que ela não seja utilizada no desenvolvimento de sistemas para renderização em tempo real. No entanto, o fundador e os colaboradores do OGRE acreditam que tiveram sucesso em desenvolver uma engine gráfica orientada a objetos de alto desempenho.
Em suma, os benefícios da utilização de OO são:
  • Abstração: interfaces comuns escondem as diferenças de implementação da API 3D e dos sistemas operacionais aos quais as aplicações se destinam;
  • Encapsulamento: há muito trabalho com o gerenciamento de variáveis de estado e ações sensíveis a contexto a ser feito em engines gráficas. Encapsulamento permite posicionar código e dados perto de onde são utilizados, o que torna o código mais legível, compreensível e confiável por que evita duplicatas;
  • Polimorfismo: o comportamento de métodos muda de acordo com o tipo de objeto que está sendo usado, mesmo que seja utilizada uma única interface. Por exemplo, uma classe especializada em gerenciar cenários in-door se comporta completamente diferente do scene manager padrão mas parece idêntica a outras classes do sistema e possui os mesmos nomes para os métodos.


Multi-Tudo

OGRE é desenvolvido com a proposta de estender qualquer tipo de cenário, plataforma ou API 3D. Apesar de implementar, debaixo dos panos, otimizações específicas para cada tipo de cenário, a engine não é restrita a rodar sobre uma única API gráfica, em uma determinada plataforma e para cenários específicos.
Assim sendo, todas as partes "vísiveis" de OGRE são independentes de plataforma, de API e do tipo de cenário. Não há dependências com tipos Windows nem suposições sobre o cenário que você quer criar e todos os princípios dos aspectos 3D são baseados mais em conceitos matemáticos que em uma API gráfica em particular.
É claro que em algum momento questões específicas sobre API, plataforma e cenário têm de ser definidas. No entanto, isso é feito em uma classe especializada que mantém uma interface comum com outras especializações para os mais diversos ambientes.
Por exemplo: existe a classe "Win32Window" que se responsabiliza por todos os detalhes da renderização de janelas na plataforma Win32. Contudo, o designer da aplicação só precisa manipular a sua interface "RenderWindow", que é a mesma para todas as plataformas.
Da mesma maneira, a classe "SceneManager" é responsável pela disposição dos objetos na cena e pela ordem em que esses objetos são renderizados. As aplicações só precisam utilizar essa interface mas existe uma classe especializada chamada "BspSceneManager" que otimiza a disposição de objetos para cenários in-door - o que garante ao usuário tanto um bom desempenho quanto uma interface fácil de aprender a usar.
Tudo que a aplicação precisa fazer é dar a entender qual o tipo de cenário que ela está renderizando e deixar que o próprio OGRE escolha qual a implementação mais adequada para aquele propósito.
A natureza orientada a objetos de OGRE possibilita todas essas vantagens. Atualmente, a engine roda em Windows, Linux e Mac OSX usando drivers plugins para as API's gráficas subjacentes (atualmente, Direct3D e OpenGL). Aplicações usam OGRE em um alto nível de abstração, o que assegura que elas irão rodar em qualquer plataforma e sistemas de renderização providos pelo OGRE sem a necessidade de uma plataforma ou API específica.

Nenhum comentário:

Postar um comentário