domingo, 23 de outubro de 2011

Objetos Centrais do OGRE [Introdução]

Vamos, com base no manual disponível no site oficial do OGRE [http://goo.gl/fU0Ky] fazer um apanhado geral sobre os principais objetos que são utilizados para renderizar uma cena. É claro que, devido à enorme quantidade de classes que compõem a engine, não são explicados cada um dos objetos que podem ser instanciados - apenas aqueles que possuem papel fundamental para a criação de qualquer que seja o tipo de cenário que você deseja.
Um detalhe importante para o bom funcionamento do código é que OGRE utiliza namespaces do C++. Quem já programa na linguagem, possivelmente não encontrará qualquer novidade quanto a isso. De modo simplificado, namespaces são um recurso que possibilita a distinção e o uso de diferentes classes (pertencentes a diferentes domínios da aplicação) que possuem o mesmo nome.
Por exemplo, se na aplicação em que utilizaremos OGRE já houver uma classe chamada Camera (que também é definida na biblioteca da engine), não haverá qualquer tipo de conflito nos usos por que a classe Camera de OGRE é especificada com seu namespace, assim:

Ogre::Camera

Para evitar ter que utilizar o prefixo "Ogre::" sempre que for utilizar uma de suas classes, é possível declarar que se está utilizando o namespace desejado com o seguinte statement

using namespace Ogre;

O que não é nenhuma novidade para quem já está familiarizado com C++. No entanto, vale lembrar que, havendo alguma ambiguidade entre as classes utilizadas (isto é, duas classes com mesmo nome), é necessário o uso do prefixo.

Visão Global das Classes OGRE

Na imagem, vemos a representação UML de um diagrama de classes do OGRE - clique para ver em tamanho maior. 
No topo da imagem está o objeto raiz - Root. Ele é a porta de entrada para utilização da engine e é o objeto através do qual se instanciam objetos muito importantes como gerentes de cena (Scene Manager), sistemas e janelas de renderização, entre outros. Normalmente, o objeto Root só oferece outros objetos - que farão os trabalhos específicos -, funcionando como um organizador ou facilitador do processo.
Os principais módulos da engine, como se pode ver na imagem, são:

Gerenciamento de Cena (Scene Management)

Responsável pelo conteúdo da cena, sua estruturação, como ela é vista pela(s) câmera(s), etc. Objetos deste módulo são responsáveis por fornecer uma interface declarativa para o mundo que está sendo construído. Isto é, eles oferecem funcionalidades que permitem ao programador declarar onde colocar determinados objetos, qual o material de cada objeto, qual o ponto de observação pelo qual a cena está sendo visualizada e assim por diante.

Gerenciamento de Recursos (Resource Management)

Qualquer renderização precisa de recursos - que podem ser geometria, texturas, fontes, etc. É importante gerenciar cuidadosamente o carregamento, re-uso e descarregamento desses recursos e essa gerência é provida pelos objetos dos tipos definidos neste módulo (Resource Management).

Renderização (Rendering)

As classes deste módulo tratam do nível mais baixo do pipeline de renderização. São objetos específicos da API do sistema de renderização como buffers e estados de renderização (render states). Os objetos do módulo de gerenciamento de cena usam os objetos deste módulo para ter suas representações de alto-nível renderizadas na tela.

Plugins

Os módulos de plugin presentes na imagem são a maneira como OGRE pode ser facilmente estendido para solucionar os mais diversos tipos de problemas de computação gráfica - e não ficar atrelado a um único tipo de renderização como, por exemplo, renderização de cenários in-door, que são muito frequentes.

Abordaremos, em postagens futuras, cada um dos principais objetos que precisam ser instanciados e utilizados na renderização de uma cena básica. Também é possível ter uma noção da utilização e do papel de cada objeto dentro do contexto global (explicitado aqui) nos tutoriais básicos - que são menos maçantes e bastante motivadores.

Um comentário: