Sobre Mim
23 anos;
Bacharel em Sistemas de Informação pela Universidade Católica de Santos;
Trabalho com Java para sistemas Web;
Estudo desenvolvimento de jogos desde 2009;
2 projetos na área de jogos: Shyds; PontoV.
Shyds Games - http://shydsgames.com/
Criado para armazenar nossos jogos, news e como blog de desenvolvimento;
Projetos: Bola de Pano; Tumbu; Black Amber; Sem nome (Em desenvolvimento).
PontoV - http://www.pontov.com.br/
Artigos sobre desenvolvimentos de jogos em geral;
Escrevo na coluna sobre Ogre3D
Introdução ao Desenvolvimento de Jogos em Ogre 3D
Introdução;
Principais Trabalhos;
Características e Features;
Ferramentas;
Ogre API;
Considerações Finais;
Ogre 3D
OGRE == Object-Oriented Rendering Engine;
Object-Oriented;
Rendering Engine;
Escrita em C++;
Ogre 3DBreve História
Steve Streeting;
Iniciado em 2000;
Release 1.0 (Azathoth) lançado em 02/2005;
Atualmente na versão 1.8.1 (Byatis) lançada em 09/2012.
Ogre3DPrincipais Trabalhos
Garshasp - The Monster Slayer;
Family Farm;
Project Aftershock;
TorchLight;
TorchLight
Desenvolvido pela Runnic Games;
Lançado em outubro de 2009;
Maioria das bibliotecas utilizadas são Open Source;
TorchLight
No dia 6 de agosto de 2010 o número de vendas já ultrapssava 600 mil vendas (fonte: Gamasutra);
Foi pago pelo jogo 20 dólares (caixa) e 10 dólares pelo download.
Ogre 3DPrincipais características
Orientada a Objetos;
Orientada a cenas (Grafos);
Produção de Aplicações Gráficas 3D aceleradas por Hardware;
Abstração o do uso de OpenGl e DirectX.
Ogre 3DPrincipais Features
Multiplataforma (Windows, Linux, Mac OS);
Iphone;
Renderiza em DirectX 9, DirectX 10, OpenGL e OpenGL ES;
Ogre 3DPrincipais Features
Suporta Shader em CG, DirectX HLSL e OpenGL GLSL;
Level Of Detail;
Tipo de Imagens suportadas: PNG, JPEG, TGA, BMP, PVRTC, DDS;
Sistema de Partículas.
Ogre 3DOutras Features
Plugins para exportar para os principais modeladores 3D;
Carrega arquivos compactados (zip, pk3);
Frameworks para facilitar integração com as principais Engines Físicas;
Integração com o OIS;
Ogre 3DFeatures de Próximos Releases
Suporte a Android(Android NDK) e Windows Phone 8;
Renderização em DirectX 11;
Renderização via Rede.
Ogre 3DPrincipais Vantagens
Desempenho; Multiplataforma; Open Source (MIT License); Boa documentação; Grande Comunidade ativa; Grande número de plugins, add-nos e
bibliotecas gratuitas; Ser apenas uma engine gráfica.
Ogre 3DPrincipais Desvantagens
Tempo de Compilação; Não funcionar em consoles*; Ser apenas uma engine gráfica.
GUI
BetaGUI; ButtonGUI; CEGUI; Hikari; libRocket; MyGUI; Navi; QucickGUI; TwOgre; Tiny GUI; Noesis GUI.
Particulas
Particle Universe;
Particule FX;
Particle Accelerator;
Ogre Partciel Editor;
Ogre Particle Lab;
HellHeavenFx Ogre;
Inicialização do Ogre 3D
mRoot = new Ogre::Root(PLUGINS_CFG);
// Carregando as pastas dos resourcesOgre::ResourceGroupManager::getSingleton().addResourceLocation("media/materials/scripts", "FileSystem", "Popular");Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/materials/textures", "FileSystem", "Popular");Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media/models", "FileSystem", "Popular");Ogre::ResourceGroupManager::getSingleton().addResourceLocation("media", "FileSystem", "General"); // mRoot->restoreConfig() Verifica se ja existe configuração no ogre.cfg// se existir retorna true e entra no if// senão cai no OU e mostra a tela para escolher configuraçãoif(mRoot->restoreConfig() || mRoot->showConfigDialog()){ // O primeiro parâmetro diz ao Ogre que ele pode criar uma janela para renderização // O segundo parâmetro é o titulo da Janela mWindow = mRoot->initialise(true, "Ponto V - Tutorial 1");}else{ // Caso o usuário aperte cancel na tela do ogre feche o programa return false;}
Inicialização do Ogre 3D
// Escolhendo o gerenciador de cenasmSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC); // Cria a cameramCamera = mSceneMgr->createCamera("Camera");
// ViewPort é o que faz a cena ser renderizado pela cameraOgre::Viewport* vp = mWindow->addViewport(mCamera);// Cor de fundo do ViewPortvp->setBackgroundColour(Ogre::ColourValue(0, 0, 0));
// Muda o aspecto(width, height) da camera para se adequar ao ViewPortmCamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));
// Carrega Todos resouresOgre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
Grafo de CenasNó de Cena
O que é?
Nó raiz:
Criando um Nó de cena:
Ogre::SceneNode* node = sceneManager->createSceneNode("Node1");//ousceneManager->getRootSceneNode()->createSceneNode("Node1");
sceneManager->getRootSceneNode();
Grafo de CenasEntidades
O que é?
Criando uma entidade:
Anexando uma entidade a um nó:
Ogre::Entity* entidade = sceneManager->createEntity( “NomeDaEntidade“ , “arquivo.mesh“ );
node->attachObject(entidade);
Grafo de CenasHierarquia de Nós
Root Scene NodePosicao ( 0, 0, 0 )
Node 1Posicao ( 10, 0, 0 )
EntityPosicao(10,0,0)
Node 2Posicao ( 0, 10, 20 )
Entity 2Posicao(10,10,20)
Transformações
node->setPosition(10,0,0);
node->scale(2.0f,2.0f,2.0f);
Posição:
Translação:
Escala:
node->translate(20,0,0);
Transformações
node->yaw( Ogre::Radian( 3.14f ) );
node->yaw( Ogre::Degree( 180 ) );
node->setOrientation( 0.0f, 0, 1, 0 );
node->rotate( Ogre::Quartenion( 0, 0, 1, 0 ) );
node->lookAt( Ogre::Vector3( 0, 0 ,0 ) );
node->pitch( Ogre::Degree( 180 ) );node->roll( Ogre::Degree( 180 ) );
Rotação:
Luz, Camera...e Sombras
Ogre::Light* luz = sceneManager->createLight( “luz1” );
luz->setType( Ogre::Light::LT_POINT );luz->setType( Ogre::Light::LT_DIRECTIONAL );luz->setType( Ogre::Light::LT_SPOTLIGHT );
Luz:
Luz, Camera...e Sombras
sceneManager->setShadowTechnique( Ogre::SHADOWTYPE_NONE );sceneManager-
>setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_ADTIIVE );sceneManager-
>setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_MODULATIVE );
sceneManager->setShadowTechnique( Ogre::SHADOWTYPE_ADDITIVE );
sceneManager->setShadowTechnique( Ogre::SHADOWTYPE_MODULATIVE );
Sombras:
Luz, Camera...e Sombras
Ogre::Camera* camera = sceneManager->createCamera( “camera1” );
camera->setNearClipDistance( 5 );camera->setFarClipDistance( 5000 );
node->attachObject( camera );
Camera:
OISObject Oriented Input System
mInputManager = OIS::InputManager::createInputSystem( pl ); mKeyboard = static_cast<OIS::Keyboard*>(mInputManager-
>createInputObject( OIS::OISKeyboard, true ));
mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject( OIS::OISMouse, true ));
Inicializando:
OISObject Oriented Input System
class nomeDaClasse: public OIS::KeyListener, public OIS::MouseListener
...
mMouse->setEventCallback(this);mKeyboard->setEventCallback(this);
...
mKeyboard->capture();mMouse->capture();
Capturando Entradas:
OISObject Oriented Input System
bool keyPressed( const OIS::KeyEvent &arg ){}bool keyReleased( const OIS::KeyEvent &arg ){}
bool mouseMoved( const OIS::MouseEvent &arg ){}bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id ){bool mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id ){
Métodos da Interface:
Animação
Ogre::AnimationState* andar = entidade->getAnimationState( “andar” );
Ogre::AnimationStateSet* animacoes = entidade->getAllAnimationsStates();
Pegando animações de uma entidade:
Animação
andar->setTimePosition(0);andar->setEnabled(true);andar->setLoop(true);
...
//no seu método de atualização de frameandar->addTime( deltaTime );
Animando
Bibliografia
OGRE Wiki. Disponível em: http://www.ogre3d.org/tikiwiki/
JUNKER, G. Pro Ogre 3D Programming. New York: Apress, 2006.
KERGER, Felix. Ogre 3D 1.7 Beginner’s Guide, 2010.
Top Related