• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
jMonkeyEngine: Desenvolvimento 3D com Java
 

jMonkeyEngine: Desenvolvimento 3D com Java

on

  • 8,336 views

Palestra apresentada no FISL 10, em Porto Alegre/RS por Leandro Nunes, do RSJUG

Palestra apresentada no FISL 10, em Porto Alegre/RS por Leandro Nunes, do RSJUG

Statistics

Views

Total Views
8,336
Views on SlideShare
8,298
Embed Views
38

Actions

Likes
4
Downloads
167
Comments
0

3 Embeds 38

http://www.slideshare.net 36
http://www.linkedin.com 1
http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    jMonkeyEngine: Desenvolvimento 3D com Java jMonkeyEngine: Desenvolvimento 3D com Java Presentation Transcript

    • jMonkeyEngine Desenvolvimento 3D com Java Leandro Nunes Leandro@RSJUG.org   http://leandron.wordpress.com  
    • Introdução  O que é jMonkeyEngine ?  É um engine(motor) para desenvolvimento 3D.  Desenvolvida 100% em Java, usa JNI para acessar bibliotecas nativas e comunicar diretamente com o hardware.  Cenas baseada em Grafo (graph-based)  Utiliza essa estrutura para representar todos os elementos da aplicação  Geometrias  Som  Iluminação    Física    etc...
    • Introdução  Exemplo    
    • Introdução  Vantagens da abordagem de graph-based  As transformações são aplicadas recursivamente aos nodos filhos  Rotação, Posicionamento, Escala, Iluminação...  Reduz a complexidade do algoritmo de renderização  “Se o nodo pai não é mostrado, então o nodo filho também não”    
    • Introdução  Arquitetura SEU CÓDIGO AQUI!!! Cenas Inputs Recursos Gráficos core jMonkeyEngine Importação Colisão Áudio Extensões da Comunidade LWJGL jME-Physics   OpenGL OpenAL jInput   ODE, PhysX
    • Formas Geométricas    
    • Formas Geométricas  São os nodos “folha” do grafo  Baseados em malhas de triângulos (TriMesh)  Extendem Spatial    
    • Formas Geométricas  Arrow  AxisRods    
    • Formas Geométricas  Box  RoundedBox  Capsule    
    • Formas Geométricas  Cone  Cylinder  Disk    
    • Formas Geométricas  Dodecahedron  Dome  Hexagon    
    • Formas Geométricas  Icosahedron  Octahedron  Pyramid    
    • Formas Geométricas  Quad  Sphere  Geosphere (esfera parametrizável)    
    • Formas Geométricas  Teapot  Torus    
    • Câmera    
    • Câmera  Câmeras são os objetos usados para visualizar o estado de uma cena.  Num dado momento a câmera “olha”, de um ponto para outro, fornecendo a nossa janela de visualização.    
    • Câmera  A Câmera fornece ao renderizador, quais posições da cena devem ser mostradas num determinado momento.  Utiliza um modelo de Visão Frustum para delimitar a área a ser mostrada.  http://en.wikipedia.org/wiki/Viewing_frustum    
    • Câmera    
    • Câmera  Câmeras podem ser adicionadas à qualquer nodo.  Isso abre possibilidade de fazer, por exemplo, com que uma câmera mostre a visão de um objeto em movimento, e acompanhe sua movimentação.    
    • Iluminação    
    • Iluminação  A iluminação é realizada através de pontos de luz, posicionados e configurados para emissão de cores, que incidem sobre os demais nodos.  Propriedades de um ponto de luz (LightNode)  Posição  Cor  Ângulo de difusão  Nodo a partir de onde a luz incide    
    • Inputs    
    • Input  O framework suporta os controles comuns para games (através de InputHandler)  Teclado  Mouse  Joystick  Eles podem ser automática ou programáticamente consultados no Game Loop    
    • Game Loop    
    • Game Loop  É o fluxo básico utilizado para produzir um game ou aplicação 3D  Looping compreendendo seis etapas principais  “Ciclo de vida” de um game    
    • Game Loop Inicialização do engine Inicialização da aplicação Início do game loop Atualiza dados dos objetos Renderização Continua ?   Finalização  
    • Perfis de Aplicação    
    • Perfis de Aplicação  AbstractGame  Define métodos abstratos necessários para implementar as fases do Game Loop.  start()  initSystem()  initGame()  update()  render()  reinit()  cleanUp()  close()    
    • Perfis de Aplicação  BaseGame  Implementa o fluxo mínimo de execução de uma aplicação 3D  Apenas o método start() recebe implementação  Os demais métodos abstratos de AbstractGame devem ser implementados  Fornece liberdade ao programador    Exige maior esforço de implementação  
    • Perfis de Aplicação  SimpleGame  Extende BaseSimpleGame  Fornece vários recursos prontos para o programador  Câmera (Camera)  Tratamento de Teclado e Mouse (InputHandler)  Timer  Ponto de Luz  Variáveis de controle de fps    
    • Perfis de Aplicação  StandardGame  Extende diretamente AbstractGame  Facilita desenvolvimento de recursos avançados em games  Aplicações cliente/servidor  Alternativa à PropertiesIO (GameSettings)  Força o processamento multi-thread de OpenGL  Permite trabalhar diretamente com a fila de processamento OpenGL (GameTaskQueueManager)    
    • Perfis de Aplicação  Um pouco sobre PropertiesIO  Armazena dados de configuração visual FREQ=60 RENDERER=LWJGL WIDTH=1280 HEIGHT=1024 DEPTH=32 FULLSCREEN=false  FAQ StandardGame   http://www.jmonkeyengine.com/wiki/doku.php?id=some_standardgame_frequently_asked_questions   
    • Perfis de Aplicação  Outros perfis  FixedFrameRateGame  Possibilita que o usuário configure o máximo frame rate  Garante que a aplicação não vai ficar mais rápida do que o declarado, mas não garante que não vai ficar mais lenta :-)  Indicado para aplicações em janela    
    • Hello World!    
    • Nosso estudo de caso    
    • Transformações Geométricas    
    • Transformações Geométricas  Translação  Define uma posição no espaço para qualquer objeto que seja Spatial Vector3f destiny = new Vector3f(10, 28, 35);  mySpatial.setLocalTranslation( destiny ); ou mySpatial.getLocalTranslation().set(10, 28, 35);    
    • Transformações Geométricas  Escala  Modifica o tamanho de um Spatial através da multiplicação pelo fator informado em todos os eixos. mySpatial.setLocalScale(5.0); mySpatial.setLocalScale(0.5);    
    • Transformações Geométricas  Escala (cont.)  Para realizar o escalamento por eixo (deformação), pode-se utilizar um objeto Vector3f mySpatial.setLocalScale(         new Vector3f(0.5f, 3.0f, 1.0f)     );    
    • Transformações Geométricas  Rotação  Gira o Spatial em um ou mais eixos.  A rotação é especialmente simplificada através do uso de objetos Quartenion    
    • Detecção de Colisão    
    • Detecção de Colisão  A detecção de colisão é feita através de objetos simplificados que cobrem o Spatial onde é feito cálculo de colisão de triângulos  Exemplo...    
    • Texturas e RenderState    
    • RenderState  Introdução aos RenderStates  Enquanto as Geometrias apresentam dados sobre “o que” deve ser desenhado, os RenderStates dizem “como” deve ser desenhado  Iluminação  Mapeamento de Texturas  Materiais  Wireframe  etc.    
    • RenderState  Suponha a seguinte situação  “Você tem um conjunto de árvores que deseja renderizar como geometrias texturizadas (TextureState). O ideal é agrupar todas elas em um nodo superior e setar esse nodo com o RenderState desejado. Economia de memória e aumento de desempenho!!!”  Utiliza em qualquer Spatial o método setRenderState() seguido de  updateRenderState() para aplicar as   transformações  
    • Textura    
    • Textura  Setando o TextureState    
    • Geração de Terrenos    
    • Geração de Terrenos    
    • Importação de modelos    
    • Importação de modelos  JmonkeyEngine fornece suporte a muitos formatos de modelos 3D, tanto de ferramentas proprietárias quando Open Source.  As principais ferramentas livres são suportadas  Blender é um bom exemplo    
    • Importação de modelos  Vejamos um exemplo...    
    • Integração com SWING    
    • Integração com SWING  Como vimos, existe um perfil específico para integração da jMonkeyEngine com aplicações SWING...  SimpleHeadlessGame  A Aplicação pode controlar externamente a cena 3D    
    • Integração com SWING  Dois exemplos  Criação de um ambiente 3D na aplicação SWING  Desenha Objetos SWING no ambiente 3D    
    • Dicas Finais    
    • Dicas Finais  Java já deixou de ser há muito tempo uma linguagem “lenta” para desenvolvimento 3D  Hoje o gargalo é o chip de processamento do vídeo.  Participe do projeto!    
    • Links Interessantes    
    • Links Interessantes  Site Oficial  http://www.jmonkeyengine.com  RSJUG  http://www.rsjug.org  Lista técnica de Java    
    • OBRIGADO! jMonkeyEngine: Desenvolvimento 3D com Java Leandro Nunes Leandro@RSJUG.org   http://leandron.wordpress.com  
    • Participem do  JUGDay do RSJUG! http://jugday.rsjug.org