Publicado em 05/04/2008 - por Douglas Matoso - contato: doug_matoso(ARROBA)yahoo(PONTO)com(PONTO)br
Qualquer dúvida, sugestão, correção, entre em contato pelo email acima.
Olá, tudo bom? Neste tutorial eu vou mostrar como configurar a engine gráfica Ogre 3D no ambiente Code::Blocks com o MinGW (compilador GCC). Na minha humilde opinião, Code::Blocks + MinGW é a melhor combinação para desenvolvimento C++. Gratuita, multi-plataforma, fácil e divertido.
A engine Ogre 3D (que também é gratuita, multi-plataforma, não muito fácil, mas muito divertida) está disponível em duas formas: código-fonte e SDK pré-compilado. Pra deixar a coisa ao gosto do freguês, eu vou mostrar como configurar o ambiente das duas formas. Escolha a que preferir.
NOTA: Este tutorial foi feito utilizando as versões: Ogre 3D 1.4.7, MinGW C++ Toolbox 3.4.5 w1, Code::Blocks 8.02 e Windows XP Home SP2. Versões diferentes podem não funcionar como está descrito aqui.
Motorm4x: jogo feito em Ogre 3D
IMPORTANTE! Para utilizar com a Ogre 3D é necessário instalar uma versão modificada do MinGW, o MinGW C++ Toolbox. Você pode ter problemas se usar o MinGW original. Esteje avisado!
Você pode baixar o MinGW C++ Toolbox diretamente no seguinte link (16,5 MB):
http://downloads.sourceforge.net/ogre/MinGW_Toolbox_Setup_wr1.exe?modtime=1172757829&big_mirror=1
Ou vá ao site da Ogre 3D, www.ogre3d.org, em Downloads, Download a prebuilt SDK e clique no link para baixar o Toolbox, que está ao lado do SDK para Code::Blocks.
Execute o arquivo que você acabou de baixar para instalar o MinGW C++ Toolbox.
Para que o compilador possa ser usado em linha de comando mais facilmente, coloque o caminho para a pasta bin (ex: C:\mingw\bin) no path do Windows. Vá em Iniciar e clique com o botão direito em Meu Computador, Propriedades, Avançado, Variáveis de ambiente. Em Variáveis do sistema clique em Path, Editar e em Valor acrescente: ;C:\mingw\bin. Onde C:\mingw é o local onde seu MinGW foi instalado. Não se esqueça do ponto-e-vírgula.
Você pode baixar o Code::Blocks no seguinte endereço:
http://www.codeblocks.org/downloads/5
Ou vá ao site do Code::Blocks, www.codeblocks.org, e vá em Downloads, Binaries. Para Windows baixe o arquivo codeblocks-8.02-setup.exe, que é a versão sem o MinGW, já que já temos o MinGW instalado.
Execute o arquivo que você acabou de baixar para instalar o Code::Blocks.
Execute o Code::Blocks e ele irá lhe mostrar a lista de compiladores suportados, indicando (tomara que sim) que o GNU GCC Compiler foi detectado. Clique sobre ele, clique em Set as default e OK.
Seleção de compilador no Code::Blocks
Este passo é opcional, mas serve como uma pequena introdução ao Code::Blocks, e para verificar se o ambiente foi instalado corretamente.
Com o Code::Blocks aberto, clique em Create a new project. Escolha Empty project e clique Go. Clique Next. Em Project title coloque o título (ex: Olá Mundo). Em Folder to create project in escolha a pasta onde seu projeto vai ficar. Nos campos abaixo você define o nome do arquivo de projeto (.cbp) e visualisa como vai ficar a estrutura de pastas. Clique Next.
Nesta próxima tela você escolhe o compilador (O GNU GCC Compiler já vai estar selecionado, pois definimos ele como padrão). Aqui também você escolhe se quer que o Code::Blocks crie as configurações de debug e release, bem como os locais onde ele irá armazenar os executáveis gerados (por padrão na subpasta bin) e os arquivos objeto (por padrão na subpasta obj). Deixe como está e clique Finish.
Seu projeto foi criado. Vamos navegar um pouco no Code::Blocks e ver onde são definidas as principais propriedades do projeto.
Para utilizar bibliotecas externas e engines você vai precisar informar ao Code::Blocks onde procurar pelos cabeçalhos (.h) e pelas bibliotecas (.a, .dll) que farão parte do seu projeto. Para fazer isto, vá no menu Project >> Build options... A primeira aba, Compiler settings, lista basicamente as opções do compilador, e permite utilizar #defines ao nível de todo o projeto. Na aba Linker settings é onde você vai informar quais bibliotecas serão linkadas ao seu projeto. Em Link libraries basta clicar em Add para adicionar as bibliotecas (libs). Basta os nomes, sem extensão, já que o caminho para elas você vai informar em outra aba. Vale lembrar que o MinGW pode linkar tanto com arquivos .a como diretamente com DLLs.
Na aba Search directories é onde você vai informar onde o Code::Blocks irá encontrar os arquivos. A aba Compiler é onde devem estar as pastas que contém os cabeçalhos (.h) que você irá utilizar. Basta clicar em Add e ir adicionando as pastas. A aba Linker é onde ficam as pastas que contém os arquivos .a e .dll que serão linkados ao seu projeto.
Note que ao lado esquerdo você tem o nome do seu projeto e os nomes das configurações (no caso Debug e Release). Todas as modificações que você fizer nas abas mostradas, afetarão apenas a configuração que estiver selecionada, ou afetarão todo o projeto se o nome do projeto estiver selecionados. Isto é importante, pois alguns cabeçalhos e bibliotecas são únicas para qualquer configuração, e portanto é mais fácil setar ao nível do projeto. Outras são separadas em debug e release, portanto devem ser definidas de forma diferentes para cada configuração. Mais sobre isso quando estivermos configurando a Ogre 3D. Clique Cancel para sair desta tela.
Outra tela que vale uma visita é indo no menu Project >> Properties... Aqui você pode mudar o título do seu projeto, e alterar outras configurações. Clique na aba Build targets. Aqui você modifica os modos de compilação (ou build targets), que na maioria dos casos serão Debug e Release. Em Type você define o tipo de aplicação (console, GUI (com janelinha), ou se é uma DLL ou uma biblioteca o que você está desenvolvendo). Em Output filename você define o nome e local do executável resultante. Não vou entrar em detalhes para não alongar muito. Clique em Cancel. Let's code!
Clique no menu File >> New >> Empty file. Quando o Code::Blocks perguntar se deseja adicionar o arquivo ao seu projeto, clique Yes. Uma janela para salvar o arquivo irá aparecer. Salve como main.cpp. Na tela seguinte, ele irá lhe perguntar em quais configurações deseja adicionar este arquivo. Clique em Select all, OK. Digite o código abaixo no arquivo main.cpp:
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
cout << "Olah, enfermeira... digo, Mundo!" << endl;
return 0;
}
Para compilar e executar o programa, a barra de ferramentas do Code::Blocks oferece algumas opções:
Build: (Ctrl+F9) Compila (constrói) o programa.
Run: (Ctrl+F10) Executa o programa já compilado.
Build and run: (F9) Faz os dois passos acima. Compila o programa, e se não houver erros já o executa.
Rebuild: (Ctrl+F11) Recompila todo o programa, mesmo os arquivos que já foram compilados antes.
Clique em Build and run. Se o programa foi compilado e executou corretamente, sua configuraçao está ok. O próximo passo é colocar a Ogre 3D na jogada.
Como disse anteriormente, a Ogre 3D está disponível em duas formas: SDK pré-compilado e código-fonte. As próximas seções mostram como preparar o ambiente usando cada uma das formas. Você deve escolher uma delas, de acordo com sua preferência. Utilizar o SDK é mais fácil e recomendado para quem está começando.
Faça o download do SDK para Code::Blocks em:
http://www.ogre3d.org/index.php?option=com_content&task=view&id=411&Itemid=131
Ou vá ao site da Ogre 3D, www.ogre3d.org, em Downloads, Download a prebuilt SDK e clique no link para baixar o SDK (OGRE 1.4.7 SDK for Code::Blocks + MinGW C++ Toolbox).
Para instalar, basta executar o arquivo que você baixou.
Note a localização dos includes e libs, para você usar no passo 4 (considerando que você instalou o SDK em C:\OgreSDK):
includes: C:\OgreSDK\include
localização do ExampleApplication.h: C:\OgreSDK\samples\include
libs (que na verdade são as DLLs): C:\OgreSDK\bin\debug (para debug) e C:\OgreSDK\bin\release (para release)
Agora você pode ir para a seção 4. Configurando a Ogre 3D.
Faça o download do código-fonte e das dependências em:
http://www.ogre3d.org/index.php?option=com_content&task=view&id=412&Itemid=132
Ou vá ao site da Ogre 3D, www.ogre3d.org, em Downloads, Download a source package. Você deve baixar o código-fonte para Windows (OGRE 1.4.7 Source For Windows) e as dependências para Code::Blocks + MinGW C++ Toolbox (Code::Blocks + MingW C++ Toolkit Precompiled Dependencies 1.4.x).
Além desses arquivos, se você quiser compilar o renderizador baseado em Direct3D 9, você vai precisar ter o DirectX SDK instalado. A documentação da Ogre recomenda o DirectX SDK August 2006. Como já sabia que você ia reclamar que o download do SDK do DirectX é muito grande (grande mesmo! 448 MB), eu preparei um arquivo com apenas o que você vai precisar (os includes), que tem apenas 367 KB. Ele é retirado do DirectX SDK December 2006, mas já compilei a Ogre com ele e deu tudo certo. Faça o download aqui:
directx_sdk_dec_2006_headers.rar
Descompacte o arquivo com o código-fonte em uma pasta (ex: C:\Ogre).
Descompacte o arquivo com as dependências para a pasta ogrenew, dentro da pasta onde vc descompactou o código-fonte (ex: C:\Ogre\ogrenew), de forma que a pasta Samples do arquivo de dependências sobrescreva a pasta Samples que já existe na pasta ogrenew.
Se você baixou o DirectX SDK no link acima, descompacte-o também em qualquer lugar.
A Ogre 3D já vem com um workspace pronto para ser compilado no Code::Blocks. Abra o arquivo ogrenew\Ogre.workspace no Code::Blocks. Na aba Projects você tem todos os projetos que fazem parte da Ogre 3D. O OgreMain é o principal, e obrigatoriamente terá que ser compilado. O projetos que começam com Plugin_... são os plugins (dã!). De início você deve precisar do Plugin_OctreeSceneManager, que é o gerenciador de cena padrão (toda cena na Ogre 3D precisa de um gerenciador de cena). Os outros plugins você pode precisar ou não, dependendo do seu projeto. RenderSystem_Direct3D9 e RenderSystem_GL são os renderizadores, baseados em Direct3D 9 e OpenGL respectivamente. Você vai precisar de pelo menos um deles. Eu geralmente uso os dois, pra permitir escolher entre Direct3D e OpenGL nas minhas aplicações. Os projetos que começam com Demo_... são demos (dã! De novo.). Você pode compilar os que desejar, para ver algumas funcionalidades da Ogre 3D.
Bom, para este tutorial eu vou compilar apenas os necessários, começando pelo OgreMain. Certifique que a opção Build target na barra de farramentas do Code::Blocks está com a opção All escolhida, pois vamos compilar tanto as versões release quanto debug das DLLs da Ogre 3D. Dê um duplo clique em OgreMain, na lista de projetos, para torná-lo o projeto ativo (o nome vai ficar em negrito, e na barra de título do Code::Blocks aparece [OgreMain]). Com o projeto ativo clique em Build. Espero o Code::Blocks fazer o serviço. (Como diria o Windows: Este processo poderá levar alguns minutos, dependendo do seu computador).
Opa! ERRO! Palma, palma, não priemos cânico! Até o presente momento há um bug nas configurações da Ogre, que te dá o seguinte erro ao compilar o OgreMain:
ld.exe cannot find -lfreetype230_d
Olhando as dependências se percebe que essa lib passou da versão 2.3.0 para a 2.3.5, mas alguém esqueceu de atualizar as configurações do projeto. Mas é simples de resolver. Vá em Project > Build options... Escolha a configuração Debug e a aba Linker settings. Selecione a freetype230_d e clique Edit. Mude o nome para freetype235_d. Agora escolha Release e faça a mesma coisa, mudando freetype230 para freetype235. Clique OK para confirmar e dê um Build novamente. Agora tudo deve correr bem.
Agora para compilar o RenderSystem_Direct3D9, é preciso indicar ao compilador onde encontrar os includes do DirectX SDK. Para isso, ative o projeto RenderSystem_Direct3D9 (duplo clique nele), vá em Project > Build options... Deixe o nome do projeto selecionado (assim as alterações se aplicam tanto para release quanto debug), clique na aba Search directories, clique em Add e adicione o caminho para a pasta Include do SDK do DirectX. Dê OK para confirmar e dê um Build.
Para compilar os outros projetos basta ativá-los e clicar em Build. Como disse antes, aqui eu só necessito de: OgreMain, Plugin_OctreeSceneManager, RenderSystem_Direct3D9 e RenderSystem_GL, portanto só compilei estes. Você pode compilar outros, se desejar. Os outros não tem mistério (só ativar e Build).
Note a localização dos includes e libs, para você usar no passo 4 (considerando que você descompactou o fonte em C:\Ogre):
includes: C:\Ogre\ogrenew\OgreMain\include
localização do ExampleApplication.h: C:\Ogre\ogrenew\Samples\Common\include
libs (que na verdade são as DLLs): C:\Ogre\ogrenew\lib
Agora você pode ir para a seção 4. Configurando a Ogre 3D.
Com tudo já instalado, agora eu vou mostrar como criar um projeto e testar nosso ambiente. Para isso, eu peço que faça o download do arquivo abaixo (280 KB). Nele contém o código-fonte e mídias de uma demo da Ogre 3D (a demo Terrain).
Descompacte o arquivo em algum lugar.
Abra o Code:Blocks e clique em Create a new project (ou no menu File > New > Project...). Note que o Code::Blocks já tem um template para criar um projeto de Ogre 3D, mas eu, particularmente, prefiro criar a partir do zero. Então escolha Empty Project e clique em Go. Clique Next. Coloque o título do projeto e escolha onde ele será salvo. Salve o projeto onde você descompactou o arquivo acima, dentro da pasta ogre_terrain. O arquivo de projeto (SeuProjeto.cbp) deve ficar junto dos arquivos fonte (Terrain.h e Terrain.cpp). Não tem que ser sempre assim, mas neste exemplo é necessário, para garantir que os executáveis sejam criados nas pastas certas. Note que o Code::Blocks automaticamente cria uma pasta com o nome do projeto dentro da pasta onde você manda ele salvar o projeto. Talvez seja necessário editar o último campo, de forma que o SeuProjeto.cbp fique na pasta ogre_terrain, junto com os fontes. Clique Next para avançar e Finish (não altere as opções da última tela).
Veja como a estrutura ficou aqui (eu dei o nome OgreTerrain ao projeto):
Estrutura de pastas do projeto
Os executáveis serão criados na pasta bin\Debug (para debug) e bin\Release (para release). Eu já coloquei nestas pastas os arquivos plugins.cfg e resources.cfg corretos, necessários para o programa rodar.
Criado o projeto, vamos adicionar os arquivos fonte. Clique com o botão direito sobre o nome do projeto e em Add Files... Selecione os dois arquivos, Terrain.h e Terrain.cpp e clique em Abrir. Na janela seguinte, que pergunta em qual configuração você quer adicionar os arquivos, clique em Select all para escolher Debug e Release, e clique em OK.
Vamos agora dizer ao compilador onde encontrar os includes. Vá em Project > Build options... Com o nome do projeto selecionado, clique na aba Search directories. Na aba Compiler clique em Add e adicione a localização da pasta de includes da Ogre 3D (esta localização vai variar se você está utilizando o SDK ou compilou você mesmo os fontes. Veja a seção 3.).
Você também vai precisar adicionar a localização do cabeçalho ExampleApplication.h, que é um esqueleto de código usado pelos exemplos da Ogre 3D. A localização deste arquivo também depende se vocês está usando o SDK ou compilou o fonte. Veja na seção 3 a localização correta. Usando o SDK minha configuração ficou assim:
Configuração dos includes
NOTA: Se você instalou o SDK, ele criou uma variável de ambiente chamada OGRE_HOME, que aponta para onde o SDK foi instalado. Sendo assim, a configuração das pastas, ao invés de ficar como está acima, podem ficar assim:
$(OGRE_HOME)\include
$(OGRE_HOME)\samples\include
Desta forma, se você mudar o local de instalação, não precisa alterar todos os seus projetos, basta que a variável de ambiente reflita a nova localização.
Localização dos includes definida, agora vamos configurar as libs. Ainda na aba Search directories, clique agora na aba Linker. Adicione o caminho das libs, de acordo com a sua instalação (Recorra à sessão 3 para identificar esta localização.). Se você está usando o SDK, fique atento nesta parte. Como as libs (DLLs) estão em localizações diferentes para os modos debug e release, você deve configurar separadamente, escolhendo Debug e Release ao lado. Escolha Debug e adicione o caminho para as libs de debug, escolha Release e adicione o caminho para as libs de release. Aqui também você pode substituir a localização do SDK (ex: C:\OgreSDK) por $(OGRE_HOME).
Indicamos a localização das libs, mas falta indicar quais libs iremos usar. Selecione a aba Linker settings. Com o modo Debug selecionado ao lado, adicione o seguinte: OgreMain_d e OIS_d (basta digitar só os nomes mesmo, sem extensão nem nada). OgreMain é a biblioteca principal da Ogre, e OIS é uma biblioteca de tratamento de input (teclado e mouse) que a Ogre 3D usa em seus exemplos (e grande parte dos utilizadores de Ogre também usam em seus projetos.).
Selecione o modo Release e adicione as mesmas bibliotecas, mas agora nas versões release: OgreMain e OIS. Veja como fica minha configuração em modo Release:
Configuração das bibliotecas
Feito isso seu programa está pronto para ser compilado. Dê um Build. Se tudo correu bem, seu executável estará lá na pasta bin\Debug (se escolheu o modo debug) ou bin\Release (se escolheu release). Antes de executá-lo, entretanto, é necessário alterar mais uma coisa no projeto. Do jeito que está, se você der um Run, ele vai executar a partir da pasta onde está o projeto, e isso faz com que ele não encontre os arquivos resources.cfg e plugins.cfg. Para arrumar isso, vá em Project > Properties... Escolha a aba Build targets e escolha Debug (já deve estar selecionado). Veja a opção Execution working dir, que atualmente só tem um ponto, que significa que o executável será executado a partir da pasta onde está o projeto (como se o executável fosse copiado pra lá e depois executado). Mude este campo para bin\Debug\. Assim ele vai ser executado a partir da pasta onde ele realmente está. Selecione Release e faça o mesmo, mudando o campo para bin\Release\. Dê OK.
Agora sim meu programa vai rodar? Ainda não. O seu executável precisa encontrar as DLLs. Existem duas formas de fazer isso:
a) Colocar as DLLs em alguma pasta que faz parte do PATH do sistema (ex: C:\WINDOWS\System32).
b) Colocar as DLLs na mesma pasta do executável.
Eu prefiro a segunda forma, pois na hora de passar o programa pra outra pessoa testar, eu acabo esquecendo alguma DLL. Elas estando todas junto do executável eu sei quais DLLs aquele executável usa.
Então, vá na pasta de libs da sua instalação da Ogre e copie as seguintes DLLs:
OgreMain_d.dll
OIS_d.dll
Plugin_OctreeSceneManager_d.dll
RenderSystem_Direct3D9_d.dll
RenderSystem_GL_d.dll
Cole-as na pasta bin\Debug, onde fica seu executável de Debug.
Faça o mesmo para Release, copiando as DLLs equivalentes (as que não tem o _d ao final do nome):
OgreMain.dll
OIS.dll
Plugin_OctreeSceneManager.dll
RenderSystem_Direct3D9.dll
RenderSystem_GL.dll
E colando na pasta bin\Release.
Desta forma seu programa irá compilar e executar corretamente.
OBS.: Para retirar aquela janela do DOS que roda junto com seu programa, faça o seguinte: vá em Project > Properties... na aba Build targets escolha a configuração e na opção Type mude de Console application para GUI application. Eu gosto de deixar Console application no modo Debug, pois assim eu posso dar um cout << e imprimir valores na janelinha do DOS para testes e verificações.
Exemplo rodando
Espero que este lhe ajude a compreender melhor o funcionamento do Code::Blocks e a configuração da Ogre 3D. Mais explicações sobre o código da Ogre, arquivos resources.cfg, plugins.cfg, etc. fica pra um outro tutorial, ou você pode consultar as referências na seção 6. Links.
Qualquer dúvida, sugestão ou correção, entre em contato. (E-mail no topo da página)