• Like
jMonkeyEngine: Desenvolvimento 3D com Java
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

jMonkeyEngine: Desenvolvimento 3D com Java

  • 6,306 views
Published

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

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
6,306
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
181
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. jMonkeyEngine Desenvolvimento 3D com Java Leandro Nunes Leandro@RSJUG.org   http://leandron.wordpress.com  
  • 2. 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...
  • 3. Introdução  Exemplo    
  • 4. 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”    
  • 5. 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
  • 6. Formas Geométricas    
  • 7. Formas Geométricas  São os nodos “folha” do grafo  Baseados em malhas de triângulos (TriMesh)  Extendem Spatial    
  • 8. Formas Geométricas  Arrow  AxisRods    
  • 9. Formas Geométricas  Box  RoundedBox  Capsule    
  • 10. Formas Geométricas  Cone  Cylinder  Disk    
  • 11. Formas Geométricas  Dodecahedron  Dome  Hexagon    
  • 12. Formas Geométricas  Icosahedron  Octahedron  Pyramid    
  • 13. Formas Geométricas  Quad  Sphere  Geosphere (esfera parametrizável)    
  • 14. Formas Geométricas  Teapot  Torus    
  • 15. Câmera    
  • 16. 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.    
  • 17. 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    
  • 18. Câmera    
  • 19. 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.    
  • 20. Iluminação    
  • 21. 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    
  • 22. Inputs    
  • 23. 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    
  • 24. Game Loop    
  • 25. 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    
  • 26. 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  
  • 27. Perfis de Aplicação    
  • 28. 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()    
  • 29. 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  
  • 30. 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    
  • 31. 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)    
  • 32. 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   
  • 33. 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    
  • 34. Hello World!    
  • 35. Nosso estudo de caso    
  • 36. Transformações Geométricas    
  • 37. 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);    
  • 38. 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);    
  • 39. 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)     );    
  • 40. 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    
  • 41. Detecção de Colisão    
  • 42. 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...    
  • 43. Texturas e RenderState    
  • 44. 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.    
  • 45. 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  
  • 46. Textura    
  • 47. Textura  Setando o TextureState    
  • 48. Geração de Terrenos    
  • 49. Geração de Terrenos    
  • 50. Importação de modelos    
  • 51. 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    
  • 52. Importação de modelos  Vejamos um exemplo...    
  • 53. Integração com SWING    
  • 54. 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    
  • 55. Integração com SWING  Dois exemplos  Criação de um ambiente 3D na aplicação SWING  Desenha Objetos SWING no ambiente 3D    
  • 56. Dicas Finais    
  • 57. 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!    
  • 58. Links Interessantes    
  • 59. Links Interessantes  Site Oficial  http://www.jmonkeyengine.com  RSJUG  http://www.rsjug.org  Lista técnica de Java    
  • 60. OBRIGADO! jMonkeyEngine: Desenvolvimento 3D com Java Leandro Nunes Leandro@RSJUG.org   http://leandron.wordpress.com  
  • 61. Participem do  JUGDay do RSJUG! http://jugday.rsjug.org