jMonkeyEngine jMonkeyEngine Desenvolvimento 3D com Java Desenvolvimento 3D com Java Leandro Nunes [email protected] http://leandron.wordpress.com
Jun 29, 2015
jMonkeyEnginejMonkeyEngineDesenvolvimento 3D com JavaDesenvolvimento 3D com Java
Leandro [email protected]
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
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
Formas Formas GeométricasGeomé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âmeraCâ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çãoIluminaçã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
InputsInputs
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 LoopGame 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
Finalização
Inicialização do engine
Inicialização da aplicação
Continua ?
Início do game loop
Atualiza dados dos objetos
Renderização
Perfis de Perfis de AplicaçãoAplicaçã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=60RENDERER=LWJGLWIDTH=1280HEIGHT=1024DEPTH=32FULLSCREEN=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!Hello World!
Nosso estudo de caso
Transformações Transformações GeométricasGeomé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 Detecção de ColisãoColisã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...
TexturasTexturase e RenderStateRenderState
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 Geração de TerrenosTerrenos
Geração de Terrenos
Importação de Importação de modelosmodelos
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 Integração com SWINGSWING
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 FinaisDicas 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 Links InteressantesInteressantes
Links Interessantes
Site Oficial http://www.jmonkeyengine.com
RSJUG http://www.rsjug.org
Lista técnica de Java
OBRIGADO!OBRIGADO!
jMonkeyEngine: Desenvolvimento 3D com Java
Leandro [email protected]
http://leandron.wordpress.com
Participem do JUGDay
do RSJUG!
http://jugday.rsjug.org