Sistema de partículas para
dispositivos móveis na
plataforma Android
Acadêmico: Angel Vitor Lopes
Orientador: Mauro Marcelo Mattos
Roteiro
• Introdução – Identificação do problema – Objetivos • Fundamentação teórica – Sistema de Partículas • Desenvolvimento – Principais Requisitos – Especificação – Implementação – Operacionalidade da aplicação – Resultados e discussão • Conclusão • Extensões • DemonstraçãoIntrodução
• Dispositivos Móveis
– Previsões para computação ubíqua (onipresente) 1991
– Crescimento telefonia móvel
– Popularização dos dispositivos móveis
• Avanços de Hardware em disp. móveis
– Graphics Processing Unit (GPU)
• Avanços de Software
• Android
• Identificação do problema
– Problema de modelagem de objetos cujas formas não são bem definidas
• chuva, nuvens, fogo, fluxos de fluídos, fumaça, poeira,
efeitos de explosão, fogos de artifício, fenômenos naturais …
– Sistema de partículas (simulação física dos
elementos conforme seu comportamento no mundo real)
Introdução
• Objetivos
– Framework de suporte a utilização de sistema
de partículas para plataforma Android
– Específicos:
• Disponibilizar uma aplicação demonstração
Fundamentação teórica
• Sistema de partículas
– Dificuldade de modelar objetos cujas formas
não são bem definidas.
– Representação de um objeto através de um
conjunto composto por inúmeras partículas
que definem seu volume.
– Como exemplo, nuvem:
• Composta de inúmeras gotículas suspensas no ar, sendo que a medida que se movimentam ao longo do tempo, sua forma é alterada
Atributos de partículas:
1. Posição
2. Velocidade (direção e módulo)
3. Tamanho
4. Cor
5. Transparência
6. Forma
7. Tempo de Vida
** outros podem ser adicionados dependendo da aplicação e dos fenômenos simulados
Etapas para modelagem:
1. A cada passo de tempo
percorrido, novas partículas
são geradas
2. Cada partícula tem seus
próprios atributos
3. A partícula que atingir alguma condição de extinsão é
eliminada
4. Atributos das partículas restantes são modificados
5. As partículas ativas são
exibidas no quadro de animação.
• Física, estudo na mecânica
• Conceitos fundamentais:
– 3 leis de Newton, leis do movimento:
• um corpo permanece em repouso ou em movimento uniforme, exceto sob a atuação de uma força; • um corpo sob a atuação de uma força se move de tal forma que a taxa temporal de variação da
quantidade de movimento se iguala a força;
• se dois corpos exercem forças entre si, essas forças são iguais em magnitude e opostas em termos de direção.
– Forças de retardo:
• Gravitacional • resistiva do ar
• ascensional (força de subida)
• Plataforma Android
• OHA, 84 (2012)
• Kernel 2.6 Linux
• Plataforma Aberta
• Moderno, flexível
• Maquina virtual Dalvik
• Trabalhos correlatos
– Um estudo sobre realidade aumentada para a plataforma Android (VASSELAI, Gabriela T.)
– Trabalho de conclusão de curso (TCC)
– Simulação física de corpos rígidos em 3D. (MUELLER, Victor A.) – TCC
– Integração de sistemas de partículas com detecção de colisões em ambientes de Ray Tracing (STEIGLEDER, Mauro) – Dissertação Mestrado Ciência da Computação
Desenvolvimento
• Principais Requisitos:
• Funcionais:
– disponibilizar uma aplicação exemplo para demonstrar sua utilização e visualizar a simulação
– exibir a simulação de partículas na tela do dispositivo – permitir alterar os parâmetros de cálculo
– permitir pausar e continuar a execução durante a simulação de partículas
– permitir a troca em tempo de execução de dois parâmetros com toque na tela
– considerar um sentido e força para gravidade na simulação das partículas
– informar a quantidade de Frames Por Segundo (FPS) na simulação
Desenvolvimento
• Principais Requisitos:
• Não-Funcionais
– ser implementado para a plataforma Android – ser desenvolvido na linguagem Java com o IDE
Eclipse
– ser desenvolvido com base no Android SDK 2.2 API Level 8
– ser executado pelo hardware de um dispositivo móvel sem comprometer o desempenho do sistema
Desenvolvimento
• Especificação
– Diagrama de Pacotes • Geral – Diagrama de Classes • Motorclass br.furb.sp.motor MotorParticulas + particulasARRAY: Particula ([]) + pVertexBuffer: FloatBuffer + pIndiceBuffer: ShortBuffer # gerador: Random # ultimoTempo: long + QTDparticulas: int + QTDsubParticulas: int # velocTempo: int # gravidade: float # velocidade: float # resistenciaAR: float # tamanhoPart: float # limiteChao: float # estadoSistema: boolean # preferencias: Preferencias # contFrame: int = 0 + MotorParticulas(Preferencias) + iniciaParticulas() : void - ConstroiFloatBuffer(float[]) : FloatBuffer - ConstroiShortBuffer(short[]) : ShortBuffer + update() : void + updateEfeito() : void + destroiParticulas() : void + destroiParticulas(int) : void + criaParticula(int) : void + criaParticulas() : void + carregarPref() : void + gravarPref() : void + isAtivo() : boolean + continuarSimulacao() : void + pausarSimulacao() : void GLSurfaceView.Renderer RendererView # mSistemaParticula: MotorParticulas # drawSTR: DrawSTR # fps: CalcFPS
+ RendererView(Preferencias, int, int) + onSurfaceCreated(GL10, EGLConfig) : void + onSurfaceChanged(GL10, int, int) : void + pararSimulacao() : void + pausarSimulacao() : void + continuarSimulacao() : void + onDrawFrame(GL10) : void + drawMotorParticulas(GL10) : void GLSurfaceView SurfaceView # mRenderer: RendererView ~ cont1: int = 0 ~ cont2: int = 0 ~ x: float ~ y: float # preferencias: Preferencias
+ SurfaceView(Context, Preferencias, int, int) + onPause() : void + onResume() : void + onStop() : void + onTouchEvent(MotionEvent) : boolean Particula + x: float + y: float + z: float + vx: float + vy: float + vz: float + tempoVida: float + vermelho: float + verde: float + azul: float + ativa: boolean + efeitoAtivo: boolean + tamanhoPart: float + subParticulas: Particula ([]) + Particula()
+ Particula(float, float, float)
+ Particula(float, float, float, (...), float, float) + subParAtiva() : boolean
Desenvolvimento
• Diagramas de Estados
Activity Motor de Partículas
stm Diagrama de Estados Activ ity
Estados de uma Activity
«running» Executando Inicio «paused» Pausada «stopped» Parada Final [Resume] /onResume() [Stop] /onStop() [newActivity] /onCreate() onStart() onResume() [Pause] /onPause() [Destroy] /onDestroy() [Restart] /onRestart() onStart()
stm Diagrama de Estados Motor de Partículas
Inicial «running» Executando «paused» Pausado «stopped» Parado Final Estados Motor de Partículas
[DestróiParticulas] /destroiParticulas() [Parar] /onStop() [Continuar] /onResume() [Reiniciar] /onRestart() iniciaParticulas() [Inicio] /iniciaParticulas() [Pausar] /onPause()
Desenvolvimento
• Diagrama de Sequência
sd Diagrama de Sequencia Usuário «Activity» MenuInicial «Activity» SimulaçãoActivity «GLSurfaceView» SurfaceView «Renderer» RendererView «MotorParticulas» MotoParticula «SharedPreferences» Preferencias «Activity» Configuracoes SelecionaOpcao IniciaActivity InstanciaNovasPreferencias CriaSurfaceView CriaRenderer IniciaMotorParticulas CarregaPreferencias AtualizaSimulacao DesenhaParticulas onDrawFrame MostraSimulacao AcaoToqueMovimenta AtualizaPreferencias AcaoEntrarConfiguracoes IniciaActivity CarregaPreferencias AlteraParametrosPreferencias AtualizaPreferencias
Desenvolvimento
• Implementação
– Técnicas e Ferramentas utilizadas:
• IDE Eclipse versão 3.6.2 (Helios Service Release 2) • Android SDK da versão 2.2
• Android Development Tools (ADT) da revisão 17 • OpenGL ES 1.0
Desenvolvimento
• Implementação
– Arquivo AndroidManifest.xml – Recursos auxiliares:
1. Diretório /res/layout
• XML, layout para interface gráfica
2. Diretório /res/values/
• Implementação
– Classe Particula pacote br.furb.sp.motor
• Atributos
• Implementação
– Classe FAMotorParticulas
pacote br.furb.sp.motor.fogosartificio
– Classe FAMotorParticulas
pacote br.furb.sp.motor.fogosartificio
Desenvolvimento
Desenvolvimento
Desenvolvimento
• Resultados e discussão
– Biblioteca x Framework
– Funcionalidades Abstratas
– Problemas encontrados
• Valores, calculos de física • OpenGL ES e texto
• Escassez de material, Sistema de Partículas • Simulador Android
Desenvolvimento
• Resultados e discussão
– Testes de Desempenho
Simulação Fogos >
Desenvolvimento
• Resultados e discussão
– Testes de Desempenho
< Simulação de Gotas de Água
Simulação de Fogos de Artifício >
0 10 20 30 40 50 60 70 F P S F rames P o r S egu n d o Quantidade de partículas média de FPS 0 10 20 30 40 50 60 70 F P S F rames P o r S egu n d o Quantidade de partículas média de FPS
Conclusão
• Plataforma Android – Ponto Forte • Simulador Android – Ponto Fraco • Desafio, escassez de material
• Framework básico de suporte ao desenvolvimento de sistema de partículas
• Simulação seguindo leis físicas • Dois estudos de caso
• Todos os requisitos atendidos
• Dispositivos com Android apto a modelagem
• Fundamentação para ligar Android e modelagem por sistema de partículas
Extensões
• Acrescentar sistema de colisões ao framework
• Acrescentar modelagem de fluídos
• Adicionar efeitos na modelagem de fogos
• Portar o framework para outras plataformas
• Adicionar funcionalidade para visualização e
movimentação em 3 dimensões
• Efeito de redemoinho de partículas
Demonstração
• Demonstração no dispositivo móvel ou
Video
FIM
OBRIGADO
Acadêmico: Angel Vitor Lopes Orientador: Mauro Marcelo Mattos
Desenvolvimento
• Especificação
– Diagramas de Classes
• Pacote br.furb.sp.main
– Classe inicial básica, activity, tela de informações
• Pacote br.furb.sp.string
– Auxiliares para desenhar texto no OpenGL ES
• Pacote br.furb.sp.util
– Utilitários para o Motor de Partículas
• Pacote br.furb.sp.motor
– Define o framework
• Pacote br.furb.sp.motor.fogosartificio
• Implementação
– Classe MotorParticulas pacote br.furb.sp.motor