segunda-feira, 24 de outubro de 2011

O Objeto Root

O objeto Root é a porta de entrada para a programação no mundo OGRE e fornece funcionalidades para a configuração do sistema. Ele deve ser o primeiro a ser criado e o último a ser destruído. Uma instanciação básica do objeto, para fins de exemplo, pode ser vista a seguir:

Ogre::Root *mRoot;
mRoot = new Ogre::Root("plugins.cfg");


O parâmetro recebido no construtor indica o arquivo que contém as configurações de plugin. O padrão é "plugins.cfg". Consulte o construtor, na API, para mais detalhes.
Para exemplificar, através do método showConfigDialog() do Root, que é extremamente útil, podem ser detectadas todas as opções de renderização do sistema e exibida uma caixa de diálogo para que o usuário personalize as opções de resolução, profundidade de cor, tela cheia, etc. Ele também armazena as configurações do usuário para que o sistema possa ser inicializado diretamente depois da personalização. Um exemplo da utilização do método é exibido no código abaixo:

/*
 * Exibe o diálogo de configuração e inicializa o sistema.
 * Alternativamente, pode-se usar root.restoreConfig() para carregar 

 * a configuração se houver certeza de que há configurações 
 * válidas em ogre.cfg 
 */
if(mRoot->showConfigDialog())
    {
    /* 

     * Se showConfigDialog() retornar true, usuário clicou em OK,
     * então o sistema deve ser inicializado.
     * O parâmetro true indica a criação de uma janela padrão

     * de renderização 
     */
        mWindow = 
mRoot->initialise(true, "Nome da Janela");
    }

Para detalhes sobre o método initialise(), consulte a sua documentação, na API do OGRE.
O resultado da chamada ao método showConfigDialog() é a conhecida janela de configuração do OGRE.

O objeto Root também é a maneira como são obtidos ponteiros para outros objetos do sistema como  SceneManager, RenderSystem e vários outros gerentes de recursos. Para obter um gerente de cena (SceneManager) padrão, por exemplo, pode-se utilizar o seguinte código:

Ogre::SceneManager *mSceneManager;
mSceneManager = mRoot->createSceneManager(Ogre::ST_GENERIC);


Nas duas linhas de código acima, o objeto Root é utilizado para obter um gerente de cena com a chamada ao método createSceneManager(), que recebe como atributo uma flag que indica a criação de um Scene Manager genérico, isto é, não é específico para um cenário in-door, out-door ou qualquer outro.
Por fim, se você utilizar OGRE no modo contínuo de renderização, isto é, se você quer que todos os objetos que são renderizados sejam atualizados tão rápido quanto possível (o que acontece em games e demos mas não em utilitários de janela),  o objeto Root tem um método chamado startRendering() que, quando chamado, entra em um loop de renderização que só termina quando todas as janelas de renderização são fechadas ou qualquer objeto FrameListener indica que quer interromper o ciclo.
A chamada ao método é bastante simples - como se vê na API, ele não recebe qualquer parâmetro:

mRoot->startRendering();

Nenhum comentário:

Postar um comentário