SlideShare una empresa de Scribd logo
1 de 55
Introdução ao
Desenvolvimento de Jogos
      em Ogre 3D
              Autor:
     Jonathan Ohara de Araujo
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).
Shyds Games – Bola de Pano
   http://shydsgames.com/
Shyds Games – Tumbu
http://shydsgames.com/
Shyds Games – Black Amber
  http://shydsgames.com/
Shyds Games – Sem Nome
  http://shydsgames.com/
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;
Introdução
Ogre 3D

 OGRE == Object-Oriented Rendering Engine;

 Object-Oriented;

 Rendering Engine;

 Escrita em C++;
Ogre 3D
           Breve 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.
Principais Trabalhos
Ogre3D
       Principais Trabalhos
 Garshasp - The Monster Slayer;

 Family Farm;

 Project Aftershock;

 TorchLight;
Garshap
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.
Características
      e
   Features
Ogre 3D
    Principais 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 3D
        Principais Features

 Multiplataforma (Windows, Linux, Mac OS);

 Iphone;

 Renderiza em DirectX 9, DirectX 10, OpenGL
  e OpenGL ES;
Ogre 3D
         Principais 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 3D
           Outras 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 3D
Features de Próximos Releases

 Suporte a Android(Android NDK) e Windows
  Phone 8;

 Renderização em DirectX 11;

 Renderização via Rede.
Ogre 3D
      Principais 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 3D
    Principais Desvantagens

 Tempo de Compilação;
 Não funcionar em consoles*;
 Ser apenas uma engine gráfica.
Ferramentas
GUI
 BetaGUI;
 ButtonGUI;
 CEGUI;
 Hikari;
 libRocket;
 MyGUI;
 Navi;
 QucickGUI;
 TwOgre;
 Tiny GUI;
 Noesis GUI.
Som

 OgreAL;

 Ogre Ogg Sound;

 Audiere.
Particulas
 Particle Universe;

 Particule FX;

 Particle Accelerator;

 Ogre Partciel Editor;

 Ogre Particle Lab;

 HellHeavenFx Ogre;
Outros
 Ogitor;

 SkyX;

 Caelum;

 Ogre Speed Tree;

 HydraX;
Ogre
API
Arquivos do
                Ogre 3D
 .mesh;

 .material;

 .skeleton.
Inicialização do
                                    Ogre 3D
mRoot = new Ogre::Root(PLUGINS_CFG);

// Carregando as pastas dos resources
Ogre::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ção
if(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 cenas
mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC);

// Cria a camera
mCamera = mSceneMgr->createCamera("Camera");

// ViewPort é o que faz a cena ser renderizado pela camera
Ogre::Viewport* vp = mWindow->addViewport(mCamera);
// Cor de fundo do ViewPort
vp->setBackgroundColour(Ogre::ColourValue(0, 0, 0));

// Muda o aspecto(width, height) da camera para se adequar ao ViewPort
mCamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));

// Carrega Todos resoures
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
Grafo de Cenas
                Nó de Cena
 O que é?

 Nó raiz:
sceneManager->getRootSceneNode();



 Criando um Nó de cena:
Ogre::SceneNode* node = sceneManager->createSceneNode("Node1");
//ou
sceneManager->getRootSceneNode()->createSceneNode("Node1");
Grafo de Cenas
                  Entidades

 O que é?

 Criando uma entidade:

Ogre::Entity* entidade = sceneManager-
  >createEntity( “NomeDaEntidade“ , “arquivo.mesh“ );


 Anexando uma entidade a um nó:

node->attachObject(entidade);
Grafo de Cenas
        Hierarquia de Nós

 Como funciona?
                   Root Scene
                   Node


                   Node 1




                     Entity
Grafo de Cenas
 Hierarquia de Nós
Root Scene Node
Posicao ( 0, 0, 0 )

Node 1                 Node 2
Posicao ( 10, 0, 0 )   Posicao ( 0, 10, 20 )




     Entity
                           Entity 2
     Posicao
                           Posicao
     (10,0,0)
                           (10,10,20)
Transformações
 Posição:

node->setPosition(10,0,0);



 Translação:
node->translate(20,0,0);



 Escala:

node->scale(2.0f,2.0f,2.0f);
Transformações

 Rotação:

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 ) );
Luz, Camera...
                     e Sombras
 Luz:

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, Camera...
                      e Sombras
 Luz:

luz->setDiffuseColor( 1, 1, 1 );

node->attachObject( luz );
Luz, Camera...
                 e Sombras
 Sombras:

sceneManager->setShadowTechnique( Ogre::SHADOWTYPE_NONE );
sceneManager-
   >setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_ADTIIVE );
sceneManager-
   >setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_MODULATI
   VE );
sceneManager-
   >setShadowTechnique( Ogre::SHADOWTYPE_ADDITIVE );
sceneManager-
   >setShadowTechnique( Ogre::SHADOWTYPE_MODULATIVE );
Luz, Camera...
                    e Sombras
 Camera:
Ogre::Camera* camera = sceneManager->createCamera( “camera1” );

camera->setNearClipDistance( 5 );
camera->setFarClipDistance( 5000 );

node->attachObject( camera );
OIS
 Object Oriented Input System
 Inicializando:

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 ));
OIS
  Object Oriented Input System
 Capturando Entradas:

class nomeDaClasse: public OIS::KeyListener, public OIS::MouseListener

...

mMouse->setEventCallback(this);
mKeyboard->setEventCallback(this);

...

mKeyboard->capture();
mMouse->capture();
OIS
 Object Oriented Input System
 Métodos da Interface:

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 ){
Animação

 Pegando animações de uma entidade:

Ogre::AnimationState* andar = entidade->getAnimationState( “andar” );

Ogre::AnimationStateSet* animacoes = entidade->getAllAnimationsStates();
Animação

 Animando

andar->setTimePosition(0);
andar->setEnabled(true);
andar->setLoop(true);

...

//no seu método de atualização de frame
andar->addTime( deltaTime );
Considerações Finais
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.
Dúvidas ?




      Contato:
      jonathan.ohara.araujo@gmail.com
      @jonathan_ohara
      http://shydsgames.com/
      http://www.pontov.com.br/

Más contenido relacionado

Similar a Introdução ao Desenvolvimento de Jogos em Ogre 3D

Rastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtualRastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtualpichiliani
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5Willian Molinari
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersiMasters
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santosjonathanblacknight
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Flávio Ribeiro
 
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In SantosDesenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In Santosjonathanblacknight
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKBruno Cicanci
 
Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Odair Bonin Borges
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamAndré Espeiorin
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unipjonathanblacknight
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataformaAndré Santee
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidMaurílio Silva
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanTchelinux
 

Similar a Introdução ao Desenvolvimento de Jogos em Ogre 3D (20)

Rastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtualRastreamento 3D de objetos para realidade virtual
Rastreamento 3D de objetos para realidade virtual
 
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
TDC2011 - Desenvolvimento de jogos com Javascript e HTML5
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec SantosDesenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Santos
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
 
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In SantosDesenvolvimento de jogos e Ogre 3D - Dev In Santos
Desenvolvimento de jogos e Ogre 3D - Dev In Santos
 
Desenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDKDesenvolvimento de Jogos com Corona SDK
Desenvolvimento de Jogos com Corona SDK
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1Oficina Android - Games com AndEngine - Dia 1
Oficina Android - Games com AndEngine - Dia 1
 
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr JamDesenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
Desenvolvimento de Jogos com Cocos2d - Apresentação Coderockr Jam
 
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso UnipDesenvolvimento de jogos com ogre 3D - Mini Curso Unip
Desenvolvimento de jogos com ogre 3D - Mini Curso Unip
 
Batalhas com Robocode
Batalhas com RobocodeBatalhas com Robocode
Batalhas com Robocode
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Desenvolvendo games multiplataforma
Desenvolvendo games multiplataformaDesenvolvendo games multiplataforma
Desenvolvendo games multiplataforma
 
FLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para AndroidFLISoL'11: Desenvolvendo Games para Android
FLISoL'11: Desenvolvendo Games para Android
 
Tracking.js
Tracking.jsTracking.js
Tracking.js
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Desenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael JeffmanDesenvolvendo jogos com PyGame - Rafael Jeffman
Desenvolvendo jogos com PyGame - Rafael Jeffman
 

Más de jonathanblacknight

Dicas de carreira programador Java
Dicas de carreira programador JavaDicas de carreira programador Java
Dicas de carreira programador Javajonathanblacknight
 
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santosjonathanblacknight
 
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santosjonathanblacknight
 
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santosjonathanblacknight
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia GrandeDesenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grandejonathanblacknight
 
Desenvolvimento de jogos e ogre 3D - Unisantos
Desenvolvimento de jogos e ogre 3D - UnisantosDesenvolvimento de jogos e ogre 3D - Unisantos
Desenvolvimento de jogos e ogre 3D - Unisantosjonathanblacknight
 
Desenvolvimento de jogos e ogre 3D - Unip Santos
Desenvolvimento de jogos e ogre 3D - Unip SantosDesenvolvimento de jogos e ogre 3D - Unip Santos
Desenvolvimento de jogos e ogre 3D - Unip Santosjonathanblacknight
 
Desenvolvimento de jogos e ogre 3D - Jaguariuna
Desenvolvimento de jogos e ogre 3D - JaguariunaDesenvolvimento de jogos e ogre 3D - Jaguariuna
Desenvolvimento de jogos e ogre 3D - Jaguariunajonathanblacknight
 

Más de jonathanblacknight (10)

Workshop Git e GitHub
Workshop Git e GitHubWorkshop Git e GitHub
Workshop Git e GitHub
 
Dicas de carreira programador Java
Dicas de carreira programador JavaDicas de carreira programador Java
Dicas de carreira programador Java
 
UFAngryBirdsC Agent
UFAngryBirdsC AgentUFAngryBirdsC Agent
UFAngryBirdsC Agent
 
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 03 - Curso FATEC Santos
 
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 02 - Curso FATEC Santos
 
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC SantosDesenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santos
Desenvolvimento de jogos e Ogre3D Dia 01 - Curso FATEC Santos
 
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia GrandeDesenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
Desenvolvimento de jogos e ogre 3D - Palestra Fatec Praia Grande
 
Desenvolvimento de jogos e ogre 3D - Unisantos
Desenvolvimento de jogos e ogre 3D - UnisantosDesenvolvimento de jogos e ogre 3D - Unisantos
Desenvolvimento de jogos e ogre 3D - Unisantos
 
Desenvolvimento de jogos e ogre 3D - Unip Santos
Desenvolvimento de jogos e ogre 3D - Unip SantosDesenvolvimento de jogos e ogre 3D - Unip Santos
Desenvolvimento de jogos e ogre 3D - Unip Santos
 
Desenvolvimento de jogos e ogre 3D - Jaguariuna
Desenvolvimento de jogos e ogre 3D - JaguariunaDesenvolvimento de jogos e ogre 3D - Jaguariuna
Desenvolvimento de jogos e ogre 3D - Jaguariuna
 

Introdução ao Desenvolvimento de Jogos em Ogre 3D

  • 1. Introdução ao Desenvolvimento de Jogos em Ogre 3D Autor: Jonathan Ohara de Araujo
  • 2. 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.
  • 3. 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).
  • 4. Shyds Games – Bola de Pano http://shydsgames.com/
  • 5. Shyds Games – Tumbu http://shydsgames.com/
  • 6. Shyds Games – Black Amber http://shydsgames.com/
  • 7. Shyds Games – Sem Nome http://shydsgames.com/
  • 8. PontoV - http://www.pontov.com.br/  Artigos sobre desenvolvimentos de jogos em geral;  Escrevo na coluna sobre Ogre3D
  • 9. Introdução ao Desenvolvimento de Jogos em Ogre 3D  Introdução;  Principais Trabalhos;  Características e Features;  Ferramentas;  Ogre API;  Considerações Finais;
  • 11. Ogre 3D  OGRE == Object-Oriented Rendering Engine;  Object-Oriented;  Rendering Engine;  Escrita em C++;
  • 12. Ogre 3D Breve 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.
  • 14. Ogre3D Principais Trabalhos  Garshasp - The Monster Slayer;  Family Farm;  Project Aftershock;  TorchLight;
  • 19. TorchLight  Desenvolvido pela Runnic Games;  Lançado em outubro de 2009;  Maioria das bibliotecas utilizadas são Open Source;
  • 20. 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.
  • 21. Características e Features
  • 22. Ogre 3D Principais 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.
  • 23. Ogre 3D Principais Features  Multiplataforma (Windows, Linux, Mac OS);  Iphone;  Renderiza em DirectX 9, DirectX 10, OpenGL e OpenGL ES;
  • 24. Ogre 3D Principais 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.
  • 25. Ogre 3D Outras 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;
  • 26. Ogre 3D Features de Próximos Releases  Suporte a Android(Android NDK) e Windows Phone 8;  Renderização em DirectX 11;  Renderização via Rede.
  • 27. Ogre 3D Principais 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.
  • 28. Ogre 3D Principais Desvantagens  Tempo de Compilação;  Não funcionar em consoles*;  Ser apenas uma engine gráfica.
  • 30. GUI  BetaGUI;  ButtonGUI;  CEGUI;  Hikari;  libRocket;  MyGUI;  Navi;  QucickGUI;  TwOgre;  Tiny GUI;  Noesis GUI.
  • 31. Som  OgreAL;  Ogre Ogg Sound;  Audiere.
  • 32. Particulas  Particle Universe;  Particule FX;  Particle Accelerator;  Ogre Partciel Editor;  Ogre Particle Lab;  HellHeavenFx Ogre;
  • 33. Outros  Ogitor;  SkyX;  Caelum;  Ogre Speed Tree;  HydraX;
  • 35. Arquivos do Ogre 3D  .mesh;  .material;  .skeleton.
  • 36. Inicialização do Ogre 3D mRoot = new Ogre::Root(PLUGINS_CFG); // Carregando as pastas dos resources Ogre::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ção if(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; }
  • 37. Inicialização do Ogre 3D // Escolhendo o gerenciador de cenas mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC); // Cria a camera mCamera = mSceneMgr->createCamera("Camera"); // ViewPort é o que faz a cena ser renderizado pela camera Ogre::Viewport* vp = mWindow->addViewport(mCamera); // Cor de fundo do ViewPort vp->setBackgroundColour(Ogre::ColourValue(0, 0, 0)); // Muda o aspecto(width, height) da camera para se adequar ao ViewPort mCamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight())); // Carrega Todos resoures Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
  • 38. Grafo de Cenas Nó de Cena  O que é?  Nó raiz: sceneManager->getRootSceneNode();  Criando um Nó de cena: Ogre::SceneNode* node = sceneManager->createSceneNode("Node1"); //ou sceneManager->getRootSceneNode()->createSceneNode("Node1");
  • 39. Grafo de Cenas Entidades  O que é?  Criando uma entidade: Ogre::Entity* entidade = sceneManager- >createEntity( “NomeDaEntidade“ , “arquivo.mesh“ );  Anexando uma entidade a um nó: node->attachObject(entidade);
  • 40. Grafo de Cenas Hierarquia de Nós  Como funciona? Root Scene Node Node 1 Entity
  • 41. Grafo de Cenas Hierarquia de Nós Root Scene Node Posicao ( 0, 0, 0 ) Node 1 Node 2 Posicao ( 10, 0, 0 ) Posicao ( 0, 10, 20 ) Entity Entity 2 Posicao Posicao (10,0,0) (10,10,20)
  • 43. Transformações  Rotação: 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 ) );
  • 44. Luz, Camera... e Sombras  Luz: Ogre::Light* luz = sceneManager->createLight( “luz1” ); luz->setType( Ogre::Light::LT_POINT ); luz->setType( Ogre::Light::LT_DIRECTIONAL ); luz->setType( Ogre::Light::LT_SPOTLIGHT );
  • 45. Luz, Camera... e Sombras  Luz: luz->setDiffuseColor( 1, 1, 1 ); node->attachObject( luz );
  • 46. Luz, Camera... e Sombras  Sombras: sceneManager->setShadowTechnique( Ogre::SHADOWTYPE_NONE ); sceneManager- >setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_ADTIIVE ); sceneManager- >setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_MODULATI VE ); sceneManager- >setShadowTechnique( Ogre::SHADOWTYPE_ADDITIVE ); sceneManager- >setShadowTechnique( Ogre::SHADOWTYPE_MODULATIVE );
  • 47. Luz, Camera... e Sombras  Camera: Ogre::Camera* camera = sceneManager->createCamera( “camera1” ); camera->setNearClipDistance( 5 ); camera->setFarClipDistance( 5000 ); node->attachObject( camera );
  • 48. OIS Object Oriented Input System  Inicializando: 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 ));
  • 49. OIS Object Oriented Input System  Capturando Entradas: class nomeDaClasse: public OIS::KeyListener, public OIS::MouseListener ... mMouse->setEventCallback(this); mKeyboard->setEventCallback(this); ... mKeyboard->capture(); mMouse->capture();
  • 50. OIS Object Oriented Input System  Métodos da Interface: 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 ){
  • 51. Animação  Pegando animações de uma entidade: Ogre::AnimationState* andar = entidade->getAnimationState( “andar” ); Ogre::AnimationStateSet* animacoes = entidade->getAllAnimationsStates();
  • 54. 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.
  • 55. Dúvidas ? Contato: jonathan.ohara.araujo@gmail.com @jonathan_ohara http://shydsgames.com/ http://www.pontov.com.br/