jMonkeyEngine: Desenvolvimento 3D com Java

7.163 visualizações

Publicada em

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

Publicada em: Tecnologia
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
7.163
No SlideShare
0
A partir de incorporações
0
Número de incorporações
41
Ações
Compartilhamentos
0
Downloads
207
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

jMonkeyEngine: Desenvolvimento 3D com Java

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

×