jmonkeyengine: desenvolvimento 3d com java
DESCRIPTION
Palestra apresentada no FISL 10, em Porto Alegre/RS por Leandro Nunes, do RSJUGTRANSCRIPT
![Page 1: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/1.jpg)
jMonkeyEnginejMonkeyEngineDesenvolvimento 3D com JavaDesenvolvimento 3D com Java
Leandro [email protected]
http://leandron.wordpress.com
![Page 2: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/2.jpg)
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...
![Page 3: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/3.jpg)
Introdução
Exemplo
![Page 4: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/4.jpg)
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”
![Page 5: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/5.jpg)
Introdução
Arquitetura
OpenGL OpenAL jInput ODE, PhysX
LWJGL jME-Physics
corejMonkeyEngine
SEU CÓDIGO AQUI!!!
Cenas Inputs Recursos Gráficos
Importação Colisão ÁudioExtensões
daComunidade
![Page 6: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/6.jpg)
Formas Formas GeométricasGeométricas
![Page 7: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/7.jpg)
Formas Geométricas
São os nodos “folha” do grafo
Baseados em malhas de triângulos (TriMesh)
Extendem Spatial
![Page 8: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/8.jpg)
Formas Geométricas
Arrow AxisRods
![Page 9: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/9.jpg)
Formas Geométricas
Box RoundedBox Capsule
![Page 10: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/10.jpg)
Formas Geométricas
Cone Cylinder Disk
![Page 11: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/11.jpg)
Formas Geométricas
Dodecahedron Dome Hexagon
![Page 12: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/12.jpg)
Formas Geométricas
Icosahedron Octahedron Pyramid
![Page 13: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/13.jpg)
Formas Geométricas
Quad Sphere Geosphere
(esfera parametrizável)
![Page 14: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/14.jpg)
Formas Geométricas
Teapot Torus
![Page 15: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/15.jpg)
CâmeraCâmera
![Page 16: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/16.jpg)
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.
![Page 17: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/17.jpg)
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
![Page 18: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/18.jpg)
Câmera
![Page 19: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/19.jpg)
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.
![Page 20: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/20.jpg)
IluminaçãoIluminação
![Page 21: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/21.jpg)
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
![Page 22: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/22.jpg)
InputsInputs
![Page 23: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/23.jpg)
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
![Page 24: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/24.jpg)
Game LoopGame Loop
![Page 25: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/25.jpg)
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
![Page 26: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/26.jpg)
Game Loop
Finalização
Inicialização do engine
Inicialização da aplicação
Continua ?
Início do game loop
Atualiza dados dos objetos
Renderização
![Page 27: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/27.jpg)
Perfis de Perfis de AplicaçãoAplicação
![Page 28: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/28.jpg)
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()
![Page 29: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/29.jpg)
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
![Page 30: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/30.jpg)
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
![Page 31: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/31.jpg)
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)
![Page 32: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/32.jpg)
Perfis de Aplicação
Um pouco sobre PropertiesIO Armazena dados de configuração visual
FREQ=60RENDERER=LWJGLWIDTH=1280HEIGHT=1024DEPTH=32FULLSCREEN=false
FAQ StandardGame http://www.jmonkeyengine.com/wiki/doku.php?id=some_standardgame_frequently_asked_questions
![Page 33: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/33.jpg)
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
![Page 34: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/34.jpg)
Hello World!Hello World!
![Page 35: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/35.jpg)
Nosso estudo de caso
![Page 36: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/36.jpg)
Transformações Transformações GeométricasGeométricas
![Page 37: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/37.jpg)
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);
![Page 38: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/38.jpg)
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);
![Page 39: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/39.jpg)
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)
);
![Page 40: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/40.jpg)
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
![Page 41: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/41.jpg)
Detecção de Detecção de ColisãoColisão
![Page 42: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/42.jpg)
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...
![Page 43: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/43.jpg)
TexturasTexturase e RenderStateRenderState
![Page 44: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/44.jpg)
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.
![Page 45: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/45.jpg)
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
![Page 46: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/46.jpg)
Textura
![Page 47: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/47.jpg)
Textura
Setando o TextureState
![Page 48: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/48.jpg)
Geração de Geração de TerrenosTerrenos
![Page 49: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/49.jpg)
Geração de Terrenos
![Page 50: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/50.jpg)
Importação de Importação de modelosmodelos
![Page 51: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/51.jpg)
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
![Page 52: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/52.jpg)
Importação de modelos
Vejamos um exemplo...
![Page 53: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/53.jpg)
Integração com Integração com SWINGSWING
![Page 54: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/54.jpg)
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
![Page 55: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/55.jpg)
Integração com SWING
Dois exemplos Criação de um ambiente 3D na aplicação SWING Desenha Objetos SWING no ambiente 3D
![Page 56: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/56.jpg)
Dicas FinaisDicas Finais
![Page 57: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/57.jpg)
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!
![Page 58: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/58.jpg)
Links Links InteressantesInteressantes
![Page 59: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/59.jpg)
Links Interessantes
Site Oficial http://www.jmonkeyengine.com
RSJUG http://www.rsjug.org
Lista técnica de Java
![Page 60: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/60.jpg)
OBRIGADO!OBRIGADO!
jMonkeyEngine: Desenvolvimento 3D com Java
Leandro [email protected]
http://leandron.wordpress.com
![Page 61: jMonkeyEngine: Desenvolvimento 3D com Java](https://reader033.vdocuments.net/reader033/viewer/2022052507/5590b85b1a28abfe5e8b479b/html5/thumbnails/61.jpg)
Participem do JUGDay
do RSJUG!
http://jugday.rsjug.org