61
 jMonkeyEngine jMonkeyEngine Desenvolvimento 3D com Java Desenvolvimento 3D com Java Leandro Nunes [email protected] http://leandron.wordpress.com

jMonkeyEngine: Desenvolvimento 3D com Java

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: jMonkeyEngine: Desenvolvimento 3D com Java

   

jMonkeyEnginejMonkeyEngineDesenvolvimento 3D com JavaDesenvolvimento 3D com Java

Leandro [email protected]

http://leandron.wordpress.com

Page 2: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

Introdução

Exemplo

Page 4: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

Formas Formas GeométricasGeométricas

Page 7: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

Formas Geométricas

Arrow AxisRods

Page 9: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Box RoundedBox Capsule

Page 10: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Cone Cylinder Disk

Page 11: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Dodecahedron Dome Hexagon

Page 12: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Icosahedron Octahedron Pyramid

Page 13: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Quad Sphere Geosphere

(esfera parametrizável)

Page 14: jMonkeyEngine: Desenvolvimento 3D com Java

   

Formas Geométricas

Teapot Torus

Page 15: jMonkeyEngine: Desenvolvimento 3D com Java

   

CâmeraCâmera

Page 16: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

Câmera

Page 19: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

IluminaçãoIluminação

Page 21: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

InputsInputs

Page 23: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

Game LoopGame Loop

Page 25: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

Perfis de Perfis de AplicaçãoAplicação

Page 28: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

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

   

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

   

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

   

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

   

Hello World!Hello World!

Page 35: jMonkeyEngine: Desenvolvimento 3D com Java

   

Nosso estudo de caso

Page 36: jMonkeyEngine: Desenvolvimento 3D com Java

   

Transformações Transformações GeométricasGeométricas

Page 37: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

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

   

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

   

Detecção de Detecção de ColisãoColisão

Page 42: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

TexturasTexturase e RenderStateRenderState

Page 44: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

Textura

Page 47: jMonkeyEngine: Desenvolvimento 3D com Java

   

Textura

Setando o TextureState

Page 48: jMonkeyEngine: Desenvolvimento 3D com Java

   

Geração de Geração de TerrenosTerrenos

Page 49: jMonkeyEngine: Desenvolvimento 3D com Java

   

Geração de Terrenos

Page 50: jMonkeyEngine: Desenvolvimento 3D com Java

   

Importação de Importação de modelosmodelos

Page 51: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

Importação de modelos

Vejamos um exemplo...

Page 53: jMonkeyEngine: Desenvolvimento 3D com Java

   

Integração com Integração com SWINGSWING

Page 54: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

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

   

Dicas FinaisDicas Finais

Page 57: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

Links Links InteressantesInteressantes

Page 59: jMonkeyEngine: Desenvolvimento 3D com Java

   

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

   

OBRIGADO!OBRIGADO!

jMonkeyEngine: Desenvolvimento 3D com Java

Leandro [email protected]

http://leandron.wordpress.com

Page 61: jMonkeyEngine: Desenvolvimento 3D com Java

   

Participem do JUGDay

do RSJUG!

http://jugday.rsjug.org