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ção
Introduçã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
Introdução 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 Validar a aplicação através de um estudo de caso
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
Fundamentação teórica 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. 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
Fundamentação teórica 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)
Fundamentação teórica 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 operacional
Desenvolvimento Especificação Diagrama de Pacotes Geral Diagrama de Classes Motor
class br.furb.sp.motor 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 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 SurfaceView # mrenderer: RendererView ~ cont1: int = 0 ~ cont2: int = 0 ~ x: float ~ y: float # preferencias: Preferencias GLSurfaceView + SurfaceView(Context, Preferencias, int, int) + onpause() : void + onresume() : void + onstop() : void + ontouchevent(motionevent) : boolean
Desenvolvimento Diagramas de Estados Activity Motor de Partículas stm Diagrama de Estados Activ ity stm Diagrama de Estados Motor de Partículas Estados de uma Activity Estados Motor de Partículas Inicio [newactivity] /oncreate() onstart() onresume() Inicial [Inicio] /iniciaparticulas() «paused» Pausada [Stop] /onstop() [Pause] /onpause() [Destroy] /ondestroy() [Resume] /onresume() [Restart] /onrestart() onstart() «stopped» Parada «running» Executando [Pausar] /onpause() «running» Executando «paused» Pausado [Continuar] /onresume() [Reiniciar] /onrestart() iniciaparticulas() [Parar] /onstop() «stopped» Parado [DestróiParticulas] /destroiparticulas() Final Final
Desenvolvimento Diagrama de Sequência interação do Usuário com o sistema de partículas
sd Diagrama de Sequencia Usuário «Activity» MenuInicial «Activity» «GLSurfaceView» SimulaçãoActivity SurfaceView «Renderer» RendererView «MotorParticulas» MotoParticula «SharedPreferences» Preferencias «Activity» Configuracoes SelecionaOpcao IniciaActivity InstanciaNovasPreferencias CriaSurfaceView CriaRenderer IniciaMotorParticulas DesenhaParticulas CarregaPreferencias AtualizaSimulacao ondrawframe MostraSimulacao AcaoToqueMovimenta AcaoEntrarConfiguracoes AtualizaPreferencias 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 Dispositivo móvel Motorola Milestone 3 ( XT860 ).
Desenvolvimento Implementação Arquivo AndroidManifest.xml Recursos auxiliares: 1.Diretório /res/layout XML, layout para interface gráfica 2.Diretório /res/values/ XML, representam os Valores
Implementação Classe Particula pacote br.furb.sp.motor Atributos Método subparativa()
Implementação Classe FAMotorParticulas pacote br.furb.sp.motor.fogosartificio Método update()
Classe FAMotorParticulas pacote br.furb.sp.motor.fogosartificio Método updateefeito()
Operacionalidade Desenvolvimento
Operacionalidade 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 > < Gotas de Água
FPS - Frames Por Segundo FPS - Frames Por Segundo Desenvolvimento Resultados e discussão Testes de Desempenho 70 60 50 40 30 20 10 0 Quantidade de partículas Simulação de Fogos de Artifício > < Simulação de Gotas de Água média de FPS 70 60 50 40 30 20 10 0 média de FPS Quantidade de partículas
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 Acresentar sistema de fusão de fluídos
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 Pacote br.furb.sp.motor.gotaagua
Implementação Classe MotorParticulas pacote br.furb.sp.motor Atributos