ABIMAEL ALVES DE OLIVEIRA JUNIOR VISUALIZADOR 3D PARA DADOS DE RADAR METEOROLÓGICO USANDO WEBGL CURITIBA Outubro/2012 ABIMAEL ALVES DE OLIVEIRA JUNIOR VISUALIZADOR 3D PARA DADOS DE RADAR METEOROLÓGICO USANDO WEBGL Dissertação apresentada ao Programa de PósGraduação em Métodos Numéricos em Engenharia (PPGMNE) da Universidade Federal do Paraná (UFPR), como parte dos requisitos para obtenção do tı́tulo de Mestre em Ciências na área de concentração Mecânica Computacional Orientador: Prof. Dr. Sérgio Scheer CURITIBA Outubro/2012 Termo de Aprovação ABIMAEL ALVES DE OLIVEIRA JUNIOR VISUALIZADOR 3D PARA DADOS DE RADAR METEOROLÓGICO USANDO WEBGL Dissertação aprovada como requisito parcial para obtenção do tı́tulo de Mestre em Ciências, na área de concentração Mecânica Computacional, do Programa de Pós-Graduação em Métodos Numéricos em Engenharia (PPGMNE) da Universidade Federal do Paraná (UFPR), pela comissão formada pelos professores: Prof. Dr. Sérgio Scheer Programa de Pós-Graduação em Métodos Numéricos em Engenharia - Universidade Federal do Paraná Prof. Dr. Klaus de Geus Programa de Pós-Graduação em Métodos Numéricos em Engenharia - Universidade Federal do Paraná Prof. Dr. Walmor Cardoso Godoi Programa de Pós-Graduação em Desenvolvimento de Tecnologia IEP-Lactec Dedicatória Dedico este trabalho primeiramente a Deus, a quem rendo louvor e adoração, a minha esposa, Léa, e meu filho, Abimael Neto, que estiveram comigo em todos os momentos nesta jornada, sonhando e torcendo. Este tı́tulo também é de vocês! Também dedico a meus pais, que me proveram o bem mais importante: a vida. ii Agradecimentos Este perı́odo de estudos para obtenção deste tı́tulo só foi possı́vel porque contei com o apoio e ajuda de várias pessoas. Agradeço primeiro a Deus, que me permitiu sonhar e abençou-me de tal maneira que o sonho hoje torna-se realidade. Agradeço à minha esposa, Léa, que desde os primeiros momentos, acompanhou e torceu muito. Depois, durante a jornada, compreendeu e ajudou-me nas privações de ordem financeira e de ordem temporal. A você, meu amor, meu agradecimento! Agradeço a meu filho, Abimael Neto, que também acompanhou as privações. A você meu filho, meu muito obrigado! Agradeço ao meu orientador, professor doutor Sergio Scheer, pelas suas orientações, conselhos e auxı́lios em momentos que foram importantı́ssimos. Muito obrigado! Agradeço ao senhor Fábio Sato do Simepar pelas oportunidades de aprendizado. Agradeço aos senhores César Benneti, Leornardo Calvetti e Reinaldo Silveira do Simepar pelos comentários e sugestões. Agradeço a Capes pelo suporte financeiro. Agradeço ao Simepar pelo suporte financeiro e pelos dados que permitiram que este trabalho fosse realizado. iii Epı́grafe Como é feliz o homem que busca sabedoria, o homem que obtém entendimento Provérbios 3.13 Ensina-nos a contar os nossos dias para que nosso coração alcance sabedoria Salmos 90.12 iv SUMÁRIO Lista de Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Lista de Siglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 ESTRUTURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 RADAR METEOROLÓGICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1 FUNCIONAMENTO DO RADAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1 Princı́pios Fı́sicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.2 Refletividade Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.3 Estimativa da Distância . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.4 Volume de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 PLAIN POSITION INDICATOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 RADAR METEOROLÓGICO DO SIMEPAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3 WEBGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.1 Histórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2 PIPELINE DE APLICAÇÃO WEBGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2.1 Aplicação Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 v 3.2.2 WebGL API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.3 Shader de Vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.4 Construção de Primitivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.5 Rasterização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.6 Shader de Fragmento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3 WEBGL E VISUALIZAÇÃO CIENTÍFICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 IMPLEMENTAÇÃO DO VISUALIZADOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.1 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 IMPLEMENTAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.1 Dados do Radar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.2 Criar Grade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2.3 Calcular Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.4 Extrair Vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.2.5 Aplicar Tabela de Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.2.6 Render . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.2.7 Codificação da Aplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.2.8 Exemplo de visualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.3 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5 RESULTADOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1 CONJUNTO DE DADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.1 Preparação para testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.1.2 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 5.1.3 Tabela de Cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6 CONCLUSÕES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 vi 6.1 SUGESTÕES PARA TRABALHOS FUTUROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Glossário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Referências Bibliográficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 Apêndice A -- Depoimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 A.1 Dr. Leonardo Calvetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A.2 Dr. Reinaldo Silveira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 A.3 Fábio Sato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Apêndice B -- JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 Apêndice C -- Código-fonte Visualizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115 vii Lista de Figuras Figura 1 DIAGRAMA EM BLOCOS BÁSICO DO RADAR. Figura 2 ELEMENTOS DE GUIAS DE ONDA Figura 3 ANTENA DO RADAR DO OBSERVATÓRIO CHILBOLTON Figura 4 ONDAS INCIDENTES E ONDAS REFLETIDAS Figura 5 ESPALHAMENTO σ EM FUNÇÃO DA RELAÇÃO Figura 6 ESQUEMA DE UMA VARREDURA Figura 7 ESQUEMA DE LEITURA DE BINS PARA UM RAIO Figura 8 ESQUEMA DE APRESENTAÇÃO DE DADOS EM PPI Figura 9 VISUALIZAÇÃO DE DADOS PPI Figura 10 RADAR METEOROLÓGICO DO SIMEPAR - TORRE E ANTENA (DENTRO DA CÚPULA DE PROTEÇÃO ..................... 5 ................................. 5 ........... 7 ....................... 7 R λ .................. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Figura 11 RADAR METEOROLÓGICO DO SIMEPAR - DETALHE DA ANTENA Figura 12 TELA DO JOGO QUAKE 2 DESENVOLVIDA COM WEBGL viii 9 . 15 . . . . . . . . . . . 17 Figura 13 FIGURA DE JOGO DESENVOLVIDO COM OPENGL ES . . . . . . . . . . . . . . 19 Figura 14 PIPELINE DE APLICAÇÃO DESENVOLVIDA COM WEBGL Figura 15 DETALHES DA API WEBGL Figura 16 VOLUME DE VISÃO Figura 17 EXEMPLO DE FRAGMENTO Figura 18 DIFERENÇA ENTRE SHADER DE VÉRTICES E DE FRAGMENTOS Figura 19 TAXONOMIA DA COMPUTAÇÃO GRÁFICA Figura 20 PIPELINE DO VISUALIZADOR Figura 21 DIAGRAMA DE CLASSES Figura 22 DIAGRAMA DE CLASSES - DADOS DO RADAR Figura 23 PLANO DE PROJECAO Figura 24 TELA VIRTUAL Figura 25 VOLUME DE VISÃO Figura 26 VOLUME DE VISÃO NORMALIZADO Figura 27 TRANSFORMAÇÕES ENTRE ESPAÇOS E IMPLEMENTAÇÃO . . . . . . . . . . 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 . . 25 . . . . . . . . . . . . . . . . . . . . . . . . . 29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 . . . . . . . . . . . . . . . . . . . . . 36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 . . . . . . . 43 Figura 28 CÂMERA “LOOKAT” Figura 29 VETORES ~n,~u e ~v Figura 30 EIXO ÓTICO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Figura 31 ÂNGULO DE VISÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Figura 32 COORDENADAS NORMALIZADAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Figura 33 PIPELINE DE ESPAÇOS DE TRANSFORMAÇÃO Figura 34 PROJEÇÃO DE PONTOS NA TELA VIRTUAL Figura 35 COORDENADAS DE DISPOSITIVO Figura 36 CLASSE WEBGL E CLASSE CAMERA Figura 37 VISUALIZADOR Figura 38 VISUALIZADOR - DADOS E TABELA DE CORES Figura 39 VISUALIZADOR - CONTROLES DE CÂMERA Figura 40 VISUALIZADOR - EXEMPLO DE NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . 70 Figura 41 VISUALIZADOR - EXEMPLO DE NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . 71 Figura 42 VISUALIZADOR - RECURSO DE FILTRO DE DADOS . . . . . . . . . . . . . . . . . . . . . 50 . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 x . . . . . . . . . . . . . . . . . . . . 69 . . . . . . . . . . . . . . . . . . . . . . . 69 . . . . . . . . . . . . . . . 72 Figura 43 VISUALIZADOR - RECURSO DE FILTRO DE DADOS . . . . . . . . . . . . . . . 72 Figura 44 CHUVA INTENSA Figura 45 FOTOGRAFIA DO JORNAL GAZETA DO POVO Figura 46 TABELA DE CORES APLICADA NOS RESULTADOS Figura 47 ELEVAÇÃO 0, 5◦ Figura 48 ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Figura 49 ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Figura 50 ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Figura 51 ELEVAÇÃO 0, 5◦ - VISTA DE CIMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Figura 52 ELEVAÇÃO 0, 5◦ - VISTA DE CIMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Figura 53 ELEVAÇÃO 0, 5◦ - SOFTWARE DE VISUALIZAÇÃO DO SIMEPAR Figura 54 ELEVAÇÃO 0, 5◦ - VISUALIZAÇÃO DE SATÉLITE Figura 55 ELEVAÇÃO 1, 0◦ Figura 56 ELEVAÇÃO 1, 0◦ - NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Figura 57 ELEVAÇÃO 1, 0◦ - NAVEGAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 . . . . . . . . . . . . . . . . . . . . . . 76 . . . . . . . . . . . . . . . . 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 . . . 81 . . . . . . . . . . . . . . . . . . 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 xi Figura 58 ELEVAÇÃO 1, 5◦ Figura 59 ELEVAÇÃO 1, 5◦ - NAVEGAÇÃO Figura 60 ELEVAÇÃO 2, 0◦ Figura 61 ELEVAÇÃO 2, 0◦ - NAVEGAÇÃO Figura 62 ELEVAÇÃO 3, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Figura 63 ELEVAÇÃO 4, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Figura 64 ELEVAÇÃO 4, 0◦ - VISÃO LATERAL Figura 65 ELEVAÇÃO 5, 0◦ Figura 66 ELEVAÇÃO 5, 0◦ - NAVEGAÇÃO COM FILTRO APLICADO Figura 67 ELEVAÇÃO 6, 5◦ Figura 68 ELEVAÇÃO 6, 5◦ - VISÃO LATERAL Figura 69 ELEVAÇÃO 8, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Figura 70 ELEVAÇÃO 10, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Figura 71 ELEVAÇÃO 12, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Figura 72 ELEVAÇÃO 15, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 . . . . . . . . . . 87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 xii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Figura 73 ELEVAÇÃO 18, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Figura 74 ELEVAÇÃO 21, 0◦ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Figura 75 TODAS ELEVAÇÕES Figura 76 VISUALIZAÇÃO COM DADOS ACIMA DE 0 DBZ Figura 77 VISUALIZAÇÃO COM DADOS ACIMA DE 21 DBZ . . . . . . . . . . . . . . . . . . 94 Figura 78 VISUALIZAÇÃO COM DADOS ACIMA DE 30 DBZ . . . . . . . . . . . . . . . . . . 95 Figura 79 NAVEGAÇÃO APÓS FILTRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Figura 80 NAVEGAÇÃO APÓS FILTRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Figura 81 NAVEGAÇÃO APÓS FILTRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 xiii . . . . . . . . . . . . . . . . . . . . 93 Lista de Siglas API API : Application Programming Interface - Interface para Programação de Aplicações. Conjunto de especificações para permitir comunicação entre aplicações ou componentes de software HTML HyperText Markup Language ou Linguagem de Marcação de Hipertexto. Linguagem de marcação para criação de páginas da Internet CAD Computer Aided Design: Projeto auxiliado por computador. Programa ou sistema computacional que permite a modelagem, projeto e desenvolvimento de objetos, desenho técnicos para Engenharia e Design utilizando o computador como ferramenta de desenho. VRML Virtual Reality Modeling Language, linguagem de marcação para realidade virtual. Padrão desenvolvido em 1994 para definição de objetos 3D a partir de texto com sintaxe especı́fica que permitia definir os objetos e modelá-los para criação de ambientes de realidade virtual (RAGGETT, 1994). ACM Association for Computing Machinery IEEE Institute of Electrical and Electronics Engineers XML XML é a sigla obtida a partir dos termos em inglês eXtended Markup Language : notação baseada em rótulos e definições. Utilizada para troca de mensagens entre aplicações. xiv Resumo A previsão de tempo tem exercido um importante papel na prevenção de perdas de vidas e de bens materiais devido a alagamentos, inundações ou desmoronamentos causados por eventos severos tais como chuvas intensas ou tempestades. Porém as ferramentas de visualização de dados de Radar Meteorológico são bidimensionais, ou seja, apresentam os dados de forma planar. Além disto, as ferramentas tem necessidade de instalação e muitas vezes, são desenvolvidas para Sistemas Operacionais especı́ficos. Este trabalho apresenta uma ferramenta de Visualização de Dados de Radar Meteorológico Tridimensionais utilizando WebGL. A ferramenta apresentada permite visualizar os dados atualizados de leitura da atmosfera da região do Radar Meteorológico, em uma Visualização Tridimensional, permitindo visualizar as estruturas das nuvens e chuva, por meio da reflectividade captada pelo Radar. Utilizando WebGL, a visualização pode ser feita sem necessidade de instalação de nenhum tipo de software ou plugin especial, bastando um navegador de Internet compatı́vel com WebGL, tal como Google c e Mozilla Firefox. c Mesmo sem possuir o conceito de câmera em seu conjunto de Chrome instruções, WebGL permite a programação com desenvolvimento de funções em JavaScript para que seja possı́vel a implementação de mecanismos de navegação pelos dados visualizados. Com este recurso, o profissional pode navegar dentro do volume de dados, permitindo visualização e análise mais detalhada de algum evento metereológico que deseja-se averiguar usando os controles da câmera virtual. Os experimentos constituiram-se de testes visualizando treze elevações de data e hora especı́ficas separadamente, visualizando apenas uma elevação (sweep) em cada teste. Foi efetuado também, experimento com todas as treze elevações para a mesma data e hora especı́ficas, com todos os dados e formando o volume tridimensional. O visualizador teve bom desempenho, inclusive com a navegação pela câmera. A ferramenta de filtro foi utilizada para permitir a remoção de parte dos dados, disponibilizando melhor visualização de dados especı́ficos. Baseado nos depoimentos coletados, a ferramenta tem potencial para uso tanto em ambiente operacional quanto em ambiente de pesquisa, e a ferramenta de navegação com a câmera, permite a visualização de detalhes não facilmente identificados com as ferramentas de visualização atualmente utilizadas. Conclue-se que a ferramenta apresentada tem bom desempenho para ser empregada para previsões de curto prazo (Nowcast) e também em ambiente de pesquisa, permitindo visualização tridimensional, compreensão e análise dos fenômenos metereológicos, utilizando tecnologia preparada para a Internet, sem instalação de software, pacote ou plugins. Palavras-chave: Visualização Cientı́fica; 3D; WebGL; Radar Meteorológico, Previsão, Nowcast . xv Abstract Weather forecast has been playing an important role preventing loss of life and goods due calamity and destruction caused by flood and storms. However, the tools for data visualization of Weather Radar are bidimensional, that means, they provide visualization only in a planar way. Besides, these tools need installation and several times, they are developed for specific Operational Systems. This work presents Three-dimensional Viewer of Weather Radar Data using WebGL. The tool presented allows visualize up-to-date data collected from atmosphere by the Weather Radar in a tridimensional view, allowing view the structures of clouds and rains, by the Reflectivity measured by the Weather Radar. Using WebGL, the view can be done without any installation of programs or plugins, only a Internet browser compatible as is Google c or Mozilla Firefox. c Despite the fact that WebGL does not have a camera, it allows Chrome the development of functions in JavaScript that make possible implementation of mechanisms for navigation inside the data renderized. In addition, the profissional can navigate inside the data volume allowing a better analysis with more details for some weather event that one wants to verify using the camera controls. The experiments done were tests with thirteen sweeps for a specific date and time separately, displaying only one sweep per time in each test. Also, was done other experiment with same data and time with all data of the thirteen sweeps forming 3D Volume. The viewer had good performance, including camera movements. The filter tool was used to remove some data, allowing visualization for specific data. Based in the testimonies collected, the viewer has good potential to be used both in Operational Environment as well in an Research Environment. As conclusion, the tool proposed in this work has good performance for the operational environment for short-range forecast (Nowcast) and for the research environment allowing 3D Visualization, understanding and analysis of weather phenomena, using tecnology ready to the Internet, without installation of software, package or plugins. Scientific Visualization; WebGL; Weather Radar; 3D Viewer; Nowcast. xvi 1 1 INTRODUÇÃO A maior parte do território brasileiro encontra-se situado entre o Trópico de Capricórnio e o Equador, e portanto com clima Tropical e Equatorial. Com esta posição geográfica, o paı́s caracteriza-se por ter clima com perı́odos de intensas chuvas, principalmente durante o verão. Muitas vezes, as chuvas trazem alagamentos, inundações e destruição, principalmente nas camadas da sociedade menos favorecidas. De janeiro a março de 2011, diversos estados brasileiros sofreram alagamentos, em particular a região serrana do Estado do Rio de Janeiro, onde houveram mais de novecentas mortes (FOLHA DE SÃO PAULO, 2011) e também o litoral do Paraná (PRATEANO; RUPP; GARMATTER, 2011), em particular as cidades de Antonina e Paranaguá. Tragédias como essas não são exclusividade do Brasil. Em janeiro de 2011, a Austrália sofreu graves enchentes (FOLHAPRESS, 2011), aplacando a vida de milhares de pessoas e causando prejuı́zos materiais de grande monta. Esses fenômenos meteorológicos, muitas vezes comuns na primavera e verão na Região Sul, são alterados e influenciados por fenômenos como El Niño e La Niña (NERY, 2005). No caso do fenômeno El Niño, há um aumento nas precipitações e, por consequência, incremento na probabilidade de enchentes. Além da intensidade dos fenômenos atmosféricos terem uma variação, seus efeitos são potencializados pela ação do homem. A impermeabilização do solo e ocupação das margens dos rios tem incrementado os efeitos de enchentes e impactos na sociedade das grandes cidades, afetando não apenas suas camadas mais inferiores, mas também as chamadas classes média e alta (CASTELLANO; NUNES, 2010). Os sistemas de previsão de tempo são bem compreendidos e permitem, tanto por modelos numéricos, quanto por visualização de imagens de satélite e dados de estações, que os meteorologistas possam prever as condições climáticas para os próximos dias, porém para intervalos de tempo da ordem de dias. Porém, a visualização de dados do Radar Meteorológico permite a previsão dos eventos que estão ocorrendo em uma área de abrangência menor que as informações fornecidas pelas imagens de satélite e modelos numéricos e em intervalo de tempo da ordem de poucas horas. Esta forma de previsão permite construir sistemas de alertas para as 2 populações que possam ser atingidas por algum evento meteorológico severo, visto que pode-se monitorar o evento em intervalos de tempo menores. Contudo, estes sistemas denominados de Nowcast precisam ser aprimorados, por meio da melhoria das ferramentas que o meteorologista tem em mãos, para que este possa efetuar previsões acuradas e, se for necessário, disparar alertas para que as autoridades tomem ações necessárias. Atualmente, temos uma melhoria nos métodos numéricos para previsão mediante modelos, contudo o futuro nos aponta para melhoria de ferramentas voltadas para o meteorologista (WILSON, 2004) de modo que permita observar e perceber melhor o desenvolvimento dos fenômenos, visando avisar ou alertar as populações, prevenindo perdas materiais e de vidas. Tem-se que as ferramentas disponı́veis para uso em ambiente operacional estão sempre vinculadas a programas que dependem de suporte do sistema operacional do usuário e não têm disponibilidade de visualização por meio da Internet. Este estudo busca justamente desenvolver uma ferramenta que permita que os dados do radar possam ser lidos remotamente e visualizados por meio da Internet em ambiente tridimensional, sem as limitações para instalação de programas ou bibliotecas que trazem complexidade e muitas vezes incompatibilidades. 1.1 OBJETIVOS Percebe-se então, que é necessário o desenvolvimento de técnicas e do uso de equipa- mentos que possam auxiliar agências governamentais e de pesquisa no monitoramento do tempo para aprimorar a previsão de eventos considerados severos. O objetivo geral do trabalho é desenvolver uma ferramenta de Visualização de Dados 3D utilizando WebGL. Como objetivos especı́ficos, tem-se: • Desenvolver protótipo de ferramenta de Visualização de Dados de Radar Meteorológico 3D, porém com capacidade para apresentação dos dados em tempo hábil de modo que possa ser utilizado em ambiente operacional de análise de eventos meteorológicos; • Permitir a visualização por meio da Internet e dentro de navegador (browser), sem nenhuma instalação de software adicional; • O trabalho limita-se apenas a desenvolver um protótipo, voltado para visualização de dados de refletividade Z de radar meteorológico. 3 1.2 ESTRUTURA O trabalho está dividido em 6 capı́tulos, incluindo este capı́tulo de Introdução. O Capı́tulo 1 apresentou a introdução ao tema, bem como os objetivos do trabalho. O Capı́tulo 2 apresenta o radar meteorológico, seus princı́pios fı́sicos de funciona- mento e a grandeza refletividade Z, que é lida pelo radar. O Capı́tulo 3 apresenta a linguagem WebGL que é a linguagem utilizada para desenvolvimento do sistema para o ambiente Web. O Capı́tulo 4 apresenta o desenvolvimento do visualizador, obtenção e preparação dos dados, bem como o exemplo de visualização. O Capı́tulo 5 apresenta os resultados obtidos e depoimentos coletados durante fase de testes. O Capı́tulo 6 apresenta as conclusões e propostas para trabalhos futuros. 4 2 RADAR METEOROLÓGICO Radar é um acrônimo em inglês para Radio Detection and Ranging, que pode ser traduzido como “Detecção e estimativa de distância por rádio”. Tem suas origens nas pesquisas com rádio. Taylor e Young, dois engenheiros que trabalhavam com rádio para a Marinha Americana no ano de 1922, perceberam que quando navios passavam entre o transmissor e o receptor, havia reflexões do sinal. Em 1930, Taylor escreveu um relatório para a Marinha sobre eco de sinais de rádio de objetos em movimento, que conduziu ao desenvolvimento do radar (IEEE, 2012). O radar teve grande desenvolvimento durante a 2a Guerra Mundial, sendo considerado por alguns autores como “a invenção que mudou o mundo” (BUNDERI, 1997), apesar de ser uma invenção ainda em desenvolvimento (KRAUSE, 2000). Com o final da 2a Guerra Mundial, muitos dos radares residuais e descartados pelos militares puderam ser adquiridos para uso civil e os interessados em fazer pesquisas em Meteorologia utilizando o radar foram os primeiros a adquiri-los (RINEHART, 2004, p. 3). Desde então, o radar para uso em Meteorologia vem evoluindo de forma constante, primeiramente na parte de seus equipamentos e recentemente em aplicativos de softwares especializados (RINEHART, 2004, p. 3). 2.1 FUNCIONAMENTO DO RADAR Como bem estabelecido por Taylor, o radar funciona basicamente pela detecção do eco dos sinais eletromagnéticos de objetos. Também pode ser entendido pela analogia com o sistema de orientação utilizado pelos morcegos, que emitem sons em alta frequência e captam seu eco , identificando assim do obstáculo (SILVA NETO, 2008). A figura 1 contém um diagrama em blocos de um radar simplificado. O Transmissor é responsável pela geração e envio do pulso (ou burst) de ondas eletromagnéticas. Os três tipos mais importantes de transmissores são: Magnetrom, Klystrom e 5 Figura 1: DIAGRAMA EM BLOCOS BÁSICO DO RADAR. FONTE: o autor Transmissores de estado sólido. Os dois primeiros tipos foram desenvolvidos a partir de 1939 (RINEHART, 2004, p.18), produzindo sinais eletromagnéticos de alta potência. Recentemente, os transmissores de Estado Sólido produzem baixa potência, mas podem ser conectados em forma de array e, com o controle sobre cada elemento, permitem produzir o efeito desejado com altas potências. As ondas eletromagnéticas são conduzidas até a antena por meio do guia de onda. Diferentemente do que se pode imaginar, devido à alta-frequência utilizada, fios condutores tornam-se inviáveis para conduzir o sinal até a antena. É necessário o uso de um dispositivo similar a um tubo, composto por um material metálico em forma de tubo para conduzir o sinal do transmissor até a antena. A figura 2 mostra alguns componentes para formação do guia de onda. A antena então irradia o sinal para a atmosfera. Figura 2: ELEMENTOS DE GUIAS DE ONDA FONTE: www.antek.com 6 A antena de radar normalmente é identificada pelo conjunto antena-refletor. O dispositivo antena é pequeno quando comparado com o tamanho do refletor e é responsável por emitir as ondas eletromagnéticas e captar as ondas refletidas pelos alvos. Uma antena que emitisse as ondas em todas as direções não seria muito prática para captação dos ecos. O melhor é que seja direcional, ou seja, emita e capte ondas eletromagnéticas para e de posição especı́fica. Para isto, a antena é montada em conjunto com o refletor (RINEHART, 2004, p.27). Há diversos tipos de refletores sendo o mais comum o refletor parabólico. Este é montado de modo que a antena fique no foco do parabolóide. O objetivo desta montagem é que as ondas emitidas pela antena sejam refletidas pelo refletor e todos as ondas que chegam até o refletor sejam refletidas para o foco, onde está posicionada a antena. As ondas eletromagnéticas transmitidas pela antena viajam até “chocar-se” com algum obstáculo. Dependendo da estrutura fı́sica (tipo de material, densidade, etc), parte delas é absorvida e outra parte é refletida. Esta parte das ondas que é refletida é denominada “eco” e são espalhadas em várias direções. Uma parte da onda refletida é captada pela antena e é enviada ao Receptor que, por meio de um processador de sinais, decodifica e armazena em forma de arquivos ((RINEHART, 2004, p.13). O módulo denominado Display é responsável por apresentar a informação captada ao usuário. É uma combinação de hardware e software, onde o arquivo contendo a leitura dos sinais captados pela antena são apresentados ao usuário. A seção 2.2 descreve uma forma de apresentação dos dados de radar no display do usuário. 2.1.1 Princı́pios Fı́sicos O funcionamento do radar é baseado nas ondas eletromagnéticas que são capturadas pela antena após refletirem em objetos. Isso é possı́vel graças a um conjunto de fenômenos fı́sicos tais como Reflexão das ondas e Espalhamento. Da dinâmica ondulatória, sabe-se que ondas podem sofrer reflexão e refração quando a onda alcança uma superfı́cie que separa dois meios. Dependendo das caracterı́sticas de cada um dos meios, parte da onda que atinge esta superfı́cie (denominada onda incidente) é refletida (ALONSO; FINN, 1972, p.347). A figura 4 mostra ondas incidentes e ondas refletidas. Isso ocorre porque o meio onde as ondas estão incidindo oferece uma “resistência” ao movimento ondulatório ou a transferência de energia da onda. 7 Figura 3: ANTENA DO RADAR DO OBSERVATÓRIO CHILBOLTON FONTE: Wikipedia Essa caracterı́stica do comportamentos das ondas é facilmente notada em ondas mecânicas (ou que necessitem de um meio fı́sico para propagação), como é o caso de ondas em um lago causadas pelo impacto de uma pedra em sua superfı́cie: quando as ondas chegam até a margem, ela oferece a “resistência” ao movimento e portanto, as ondas voltam, gerando outras ondas. O ângulo de reflexão é igual ao ângulo de incidência, espelhado em relação à normal à superfı́cie (ALONSO; FINN, 1972, p.348). Figura 4: ONDAS INCIDENTES E ONDAS REFLETIDAS Espalhamento é o fenômeno pelo qual um objeto que é atingido pelas ondas eletromagnéticas sofre perturbação devido aos campos elétrico e magnético da onda e, por conta dessa perturbação, o objeto passa a irradiar ondas eletromagnéticas em todas as direções, podendo as ondas estar ou não com a mesma polarização das ondas incidentes. Basicamente, tudo o que é visto é fruto de espalhamento da luz. Com exceção de olhar diretamente para o sol, ou para um filamento incandescente de uma lâmpada bem limpa, o 8 resto que é visto deve-se ao espalhamento da luz pela superfı́cie dos materiais, sejam lı́quidos ou sólidos. Até o azul que é observado no céu é fruto de espalhamento (Espalhamento de Rayleigh). Esse fenômeno é observado em todos os comprimentos de onda das ondas eletromagnéticas, de cujo espectro, a luz visı́vel é apenas uma parte (MCCARTNEY, 1976, p. 2). O espalhamento é devido aos conjuntos de átomos e moléculas que constituem os materiais. No caso da atmosfera, ele é devido às moléculas dos vários gases, materiais particulados e aerosóis que estão presentes, bem como gotas de água, gelo, neve e outros elementos de vários tamanhos. Por definição, a Área de Espalhamento Diferencial é a razão do fluxo da intensidade de energia da onda espalhada por ângulo sólido pelo fluxo incidente (NEWTON, 2002, p. 15) : Iespalhado dσ = dΩ Iincidente (2.1) Mie 1 desenvolveu em 1908 a Teoria de Espalhamento para Esfera, que leva seu nome, a partir da solução das Equações de Maxwell 2 , que descreve os campos eletromagnéticos internos e espalhados a partir da iluminação de uma esfera (KNOX, 2011, p. 69) denominada alvo. Por sua teoria, a Área Transversal de Espalhamento (Scattering Cross Section) ou Retroespalhamento σs do alvo é determinada, entre outros fatores fı́sicos relacionados com o campo elétrico e magnético, pela razão entre o tamanho da esfera e comprimento de onda. Esta razão é dada pela equação 2.2: (NEWTON, 2002, p.49) 2πR (2.2) λ onde R é o raio da esfera e λ é o comprimento da onda eletromagnética que atinge o alvo. x= A teoria de Mie pode então, ser utilizada para identificar o espalhamento σs em função de seu raio e também do comprimento de onda (KNOX, 2011, p.70). Dependendo do valor da relação 2R λ , diferentes expressões para σs são determinadas. A figura 5 apresenta um gráfico que contém as “regiões” determinadas pela relação R << λ . Quando as esferas são pequenas e a relação 2R λ < 0, 1 (RINEHART, 2004, p.73) implica que x << 1 e o espalhamento é denominado Espalhamento de Rayleigh em homenagem a Lord Rayleigh3 que demonstrou esse espalhamento e demonstrou que a expressão σs é proporcional a (2R)6 . 1 Gustav Adolf Feodor Wilhelm Ludwig Mie (1869 - 1957); Fı́sico alemão. Clerk Maxwell (1831-1879); Fı́sico e matemático escocês conhecido principalmente pelas suas quatro famosas Equações para o Eletromagnetismo. 3 John William Strutt, Lord Rayleigh (1842-1919) publicou em 1871 [Philosophical Magazine 41(4), p. 107] a explicação que a luz espalhada pelos gases é inversamente proporcional a λ −4 . 2 James 9 Figura 5: ESPALHAMENTO σ EM FUNÇÃO DA RELAÇÃO R λ FONTE: www.radartutorial.eu A expressão completa é dada pela equação: (RINEHART, 2004, p.73) σs = π 5 |K|2 (2R)6 λ4 (2.3) onde |K|2 é um parâmetro relacionado com o ı́ndice complexo de refração do material ou meio. Para a Meteorologia, a grande maioria dos alvos são pequenos comparados com o comprimento de onda de um radar, portanto, para o radar meteorológico, a região de Rayleigh no gráfico da figura 5 é importante. Observa-se também, no gráfico, que, quanto maior o alvo (deslocando-se para a direita no eixo horizontal), o gráfico aproxima-se ou “converge” para a unidade. Isso indica que a Área de Espalhamento σs aproxima-se cada vez mais do formato geométrico da esfera (observar que o eixo vertical é dado por σ ). πR2 Portanto, a energia captada pela antena do radar é justamente a energia proveniente do espalhamento das ondas eletromagnéticas observado nestes alvos. 2.1.2 Refletividade Z Quando a antena de radar emite pulso de onda eletromagnética, a onda viaja com a ve- locidade de luz e atinge vários tipos de alvos. Muitos dos alvos não são esferas, tais como aviões, pássaros, edifı́cios. Mas também muitos dos alvos são tipicamente pequenas gotas ou gotı́culas de água. Pode-se aproximar esses alvos considerando-os esferas, para efeitos de 10 simplificação. O fato é que bilhões dessas gotı́culas são atingidas pelo pulso de energia. E o efeito disso é que essas bilhões de gotı́culas refletirão o pulso de energia e o efeito total, ou seja, a área total de espalhamento é, matematicamente, a soma das contribuições individuais (RINEHART, 2004, p.86), equação 2.4: n σt = ∑ σi (2.4) i=1 Pela equação 2.3, pode-se chegar a equação 2.5: n π 5 |K|2 (2Ri )6 λ4 i=1 σt = ∑ (2.5) Chamando 2Ri = Di , chega-se a equação 2.6 (RINEHART, 2004, p. 92): n π 5 |K|2 (Di )6 σt = ∑ λ4 i=1 (2.6) Mas na equação 2.6, todos os valores são constantes, com exceção de Di . Então: σt = π 5 |K|2 ∑ni=1 (Di )6 λ4 (2.7) Define-se z como Fator Refletividade do radar pela equação 2.8 (RINEHART, 2004, p.93): n z = ∑ (Di )6 (2.8) i=1 Dado que z pode ter uma grande variadade de valores, define-se o Fator Logarı́tmico de Refletividade de radar Z como sendo (RINEHART, 2004, p. 97): Z = 10log10 z 1mm6 /m3 (2.9) onde Z é medido em decibéis relativos à refletividade de 1mm6 /m3 e z é a Refletividade Linear em mm6 /m3 . Utilizando Z, tem-se a vantagem de compressão da variação de valores possı́veis. Valores de exemplo estão entre -30dBZ para neblina e +76,5dBZ para granizo intenso. Entende-se mediante a da equação 2.8 que a energia recebida pela antena é diretamente proporcional à sexta potência do diâmetro dos vários elementos ou hidrometeoros presentes na atmosfera. Essa informação permite que, por meio do radar meteorológico, possa-se determinar a intensidade ou estimar a quantidade de hidrometeoros de determinado diâmetro, estimar os vários aglomerados desses hidrometeoros e associá-los ao nı́vel de chuva na área de cobertura do radar. 11 2.1.3 Estimativa da Distância Um dos recursos do radar é estimar a distância em que o objeto ou obstáculo se encon- tra. Esta estimativa é obtida pelo fato de que no espalhamento a velocidade de transmissão é a mesma da onda incidente, pois a velocidade é dependente apenas do meio de transmissão. A velocidade das ondas eletromagnéticas é igual a velocidade da luz, que para o vácuo é 299.792.458 m/s (INMETRO, 2012), porém, quando as ondas propagam-se em meio diferente do vácuo, a velocidade é diferente, mas usualmente próxima da velocidade da luz no vácuo. Como visto acima, a antena do radar capta o eco resultante da onda espalhada. Essa onda foi “provocada” pela energia recebida pelo pulso de ondas transmitidas pelo radar. Logo, para estimar a distância do objeto, pode-se entender que é a distância percorrida pela onda da antena para o alvo e do alvo para a antena. Conhecendo-se o tempo para esse trajeto, obtém-se, pela equação 2.10, a distância da antena ao alvo: r= cm ∆t 2 (2.10) onde : • r : distância da antena ao alvo • cm : velocidade da onda no meio • ∆t : tempo entre a transmissão e a recepção da onda 2.1.4 Volume de Dados Como explicado anteriormente, o receptor do radar necessita conhecer o tempo em que o pulso de ondas é enviado e, caso alcance algum obstáculo, capte a onda ecoada. Com essa informação pode estimar a distância em que o alvo encontra-se. Para que isso ocorra, o receptor efetua chaveamentos na recepção a partir da transmissão do pulso, e dessa forma pode-se estabeler Range Gates ou “Porções de alcance”, denominados bins. O chaveamento é necessário para que a antena capte apenas ecos de uma determinada distância (ou intervalo) do radar, não captando ondas fora dela. Cada bin recebe o valor da média ponderada dos alvos detectados dentro da amostra do Range Gate. Para efetuar as leituras, a antena do radar usualmente efetua movimento de rotação, inclinada com ângulo em relação à horizontal denominado Ângulo de Elevação. Cada posição de rotação é denominado Raio. Em cada raio, o radar efetua a leitura nos bins. Usualmente o intervalo entre os raios do radar pode ser de 1 ◦ . 12 Figura 6: ESQUEMA DE UMA VARREDURA FONTE: (METEOPT, ) O conjunto de leituras dos raios em uma circunferência completa é denominado Varredura ou Sweep. A cada Varredura, a antena pode ser inclinada para cima, e iniciar outro procedimento de Varredura. A figura 6 mostra um esquema das leituras feitas para uma Varredura. O Volume de Dados do radar é o conjunto de todas as Varreduras, sendo cada varredura formada pelo conjunto de raios e cada raio efetua a leitura em bins. A este Volume de Dados dá-se o nome de Volume Coverage Pattern ou VCP . 2.2 PLAIN POSITION INDICATOR Os dados do radar são obtidos a partir da leitura de cada bin em cada raio de uma varredura. A figura 8 mostra que as leituras são feitas em posições especı́ficas, que correspondem aos bins. Figura 7: ESQUEMA DE LEITURA DE BINS PARA UM RAIO FONTE: (METEOPT, ) Plain Position Indicator (PPI) ou Indicador de Posição Plano é o mais tradicional modo de visualização de dados de radar meteorológico. No monitor do usuário, é apresentado um desenho, usualmente incluindo um mapa, 13 mostrando o radar no centro. Contém ainda anéis concêntricos, onde o centro é a posição do radar. Cada anel especifica uma distância a partir do radar e desta forma o usuário pode estimar a que distância estão os ecos mostrados no monitor. Usualmente, o Norte geográfico encontrase no topo, com Leste a direita. Os ecos dos obstáculos são mostrados de modo que o usuário possa ter uma estimativa visual das distâncias por meio dos anéis concêntricos. Utiliza-se ainda uma tabela de cores para que o usuário possa estimar de forma visual a intensidade da refletividade sendo apresentada no monitor. A figura 8 mostra, em forma esquemática, como é feita a apresentação em PPI. Figura 8: ESQUEMA DE APRESENTAÇÃO DE DADOS EM PPI FONTE: (RINEHART, 2004, p. 45) A figura 9 mostra um exemplo de visualização real de dados em PPI por meio de software desenvolvido internamente no Simepar. 14 Figura 9: VISUALIZAÇÃO DE DADOS PPI FONTE: Simepar 2.3 RADAR METEOROLÓGICO DO SIMEPAR O Instituto Meteorológico Simepar (www.simepar.br) possui um radar para observação de eventos meteorológicos situado na região central do estado, no municı́pio de Teixeira Soares, latitude -25,505313 ◦ e longitude -50.361330 ◦ , na altitude de 1016 m. O radar é um equipamento Banda S Dual Doppler, modelo DWSR-95S da EEC Corporation, montado sobre uma torre de concreto de 30 m. O conjunto da antena do radar mede 8,2 m de diâmetro e está protegido por uma cúpula, denominada Radome. A figura 10 mostra o radar e a antena. A antena gera pulsos com abertura de 0,9 ◦ e efetua sequência pré definida de varreduras de 360 ◦ cada, com diferentes elevações. Os alcances operacionais são de 200 km e 480km. Efetua, então varreduras com esses alcances e com variação nas elevações, produzindo um volume completo de dados a cada 12 minutos aproximadamente. Atualmente, é utilizado um software desenvolvido pela equipe de desenvolvimento do próprio Simepar que apresenta os dados para análise e visualização. O sistema está configurado para efetuar 14 varreduras com raio de 200 km. Cada varredura com 360 ◦ , ou seja, 360 raios, com 800 bins cada raio, totalizando 288.000 valores. No total das 14 varreduras, 4.032..000 valores são obtidos. 15 Figura 10: RADAR METEOROLÓGICO DO SIMEPAR - TORRE E ANTENA (DENTRO DA CÚPULA DE PROTEÇÃO FONTE: Simepar Figura 11: RADAR METEOROLÓGICO DO SIMEPAR - DETALHE DA ANTENA FONTE: Simepar 16 3 WEBGL WebGL, como descrito pelos próprios criadores (KhronosGroup Inc, 2011), é um padrão para a WEB, para definição de API de modo que possa servir de acesso de baixo nı́vel para gráficos 3D e disponı́vel por meio do elemento canvas do HTML Especificação 5 (ou simplesmente HTML 5) Baseada em OpenGL ES SL, WebGL permite a criação de shaders utilizando OpenGL ES, trazendo o desenvolvimento de aplicações gráficas em 2D e 3D utilizando JavaScript diretamente no navegador, sem necessidade de nenhum tipo de acessório ou plugin. Até o momento c Firefox e Google c Chrome têm da escrita deste trabalho, apenas os navegadores Mozilla c Safari tem suporte parcial. suporte nativo ao WebGL. O navegador Apple Juntamente com as tecnologias de HTML5 e Javascript, WebGL tem permitido que o desenvolvimento de aplicações, antes imaginadas em um contexto de criação de programas compilados 1 , ou seja, programação convencional que gera programas em código de máquina (ou binário), possam fazer parte do contexto de Internet. Essas novas tecnologias em conjunto estão permitindo a portabilidade 2 de jogos que demandam alto desempenho da placa gráfica para a web, conforme menciona (ANTTONEN et al., 2011) citando o exemplo do jogo popular Quake 2 3 . A figura 12 mostra uma imagem do vı́deo de demonstração. Percebe-se então que se torna possı́vel disponibilizar elementos de computação gráfica diretamente no navegador utilizando recursos sofisticados que podem ser aproveitados inclusive por jogos, demandando alto desempenho de placas gráficas. Contudo, a implementação de jogos, apesar dos requisitos de desempenho devido às demandas dinâmicas e a interatividade que o jogador espera, implica muitas simplificações no ambiente, que não podem ser simplificadas 1 Compilar é o processo pelo qual o compilador de determinada linguagem de programação converte o texto em código ou linguagem de máquina, permitindo assim ser executado pelo computador. 2 Portar tem o sentido de permitir a execução de um determinado software para outra plataforma ou sistema operacional. Normalmente este processo implica em, pelo menos, recompilação do código fonte para a outra plataforma ou reescrita de código fonte. 3 Este jogo foi muito popular na década de 90 e na primeira década do século 20. Seu engine trouxe grandes avanços para o desenvolvimento de jogos. Permitia programação, o que popularizou a alteração feita pelos fãs do jogo e implementando “mods” (modificações). Em 1999, o código fonte foi disponibilizado sobre licença GPL. O jogo em sua versão utilizando WebGL encontra-se disponı́vel em http://playwebgl.com/games/quake-2-webgl/ 17 Figura 12: TELA DO JOGO QUAKE 2 DESENVOLVIDA COM WEBGL FONTE: http://code.google.com/p/quake2-gwt-port/ extraı́do do filme disponibilizado no site. quando da visualização de dados. Neste trabalho, o protótipo desenvolvido visa a possibilidade de visualização de dados em ambiente Web, utilizando esta promissora tecnologia. 3.1 Histórico Segundo (ROST et al., 2006, p. 1), OpenGL é uma API padrão da indústria, final- izada em 1992 e com a primeira implementação disponibilizada em 1993. Era compatı́vel com c Visando estabelecer a API denominada IRIS GL, de propriedade da Silicon Graphics, Inc . um padrão para o desenvolvimento, Silicon Graphics, em colaboração com outras empresas de hardware criou um padrão chamado OpenGL. Para controle da evolução, foi criado pela Silicon Graphics Architecture Review Board c IBM, c Microsoft c (ARB) 4 que era formado por um conjunto de companhias tais como Apple, c entre outras. e Intel A diretiva principal da criação do OpenGL foi manter um único padrão que provesse acesso as capacidades de hardware até ao mais baixo nı́vel possı́vel e ainda permitir inde4 Grupo de Revisão da Arquitetura. O termo em inglês foi mantido por ser muito utilizado na literatura 18 pendência de fabricantes de hardware. Atualmente OpenGL encontra-se na versão 4.2 (KhronosGroup Inc, 2012) . O projeto e especificação inicial de OpenGL contemplava funcionalidades especificadas por meio de funções fixas. Porém, com novas funcionalidades disponı́veis no hardware, foram sendo implementadas Extensões que permitiam modificações na OpenGL. As Extensões ao OpenGL permitiam adaptar a biblioteca para que pudesse utilizar funcionalidades especı́ficas de uma placa gráfica. Com o lançamento da versão 2.0, o pipeline 5 da OpenGL foi alterado para permitir que funcionalidades pudessem ser programadas. Dessa forma, o processamento de Vértices e processamento de Fragmentos foi aberto para controle do desenvolvedor por meio de programação de shaders. A Linguagem de programação desenvolvida para programação dos Shaders de vértices e de fragmento é a OpenGL Shading Language (OpenGL SL). Dessa forma, juntamente com DirectX 6 , OpenGL tornou-se padrão da indústria de desenvolvimento de Computação Gráfica. Sua caracterı́stica de ser multiplataforma 7 permitiu seu uso em diversos sistemas e ambientes, tais como desenvolvimento de aplicações de CAD , processamento de vı́deo, animação e visualização cientı́fica (MUNSHI; GINSBURG; SHREINER, 2009, p. 1). Com o advento de novas tecnologias, além do desenvolvimento de OpenGL no ambiente desktop,8 houve necessidade de desenvolvimento de API para ambientes móveis, tipicamente para telefones e outros dispositivos, e mais recentemente, tablets. Dessa forma, foi criada uma nova API denominada OpenGL ES, e segundo (MUNSHI; GINSBURG; SHREINER, 2009, p. 1), essa API tinha como missão contemplar as limitações de hardware desses novos dispositivos. Segundo (BLYTHE, 2002, p. 1), a especificação 1.0 da OpenGL ES foi desenvolvida a partir da versão 1.3 da OpenGL e segundo (MUNSHI; GINSBURG; SHREINER, 2009, p. 2), a especificação 1.1 foi baseada na versão 1.5 da OpenGL. Ambas as especificações eram basedas em versões da OpenGL que tinham suas funcionalidades fixas. Porém, a partir da versão 2.0 da OpenGL ES, que foi baseada na versão 2.0 da OpenGL, a programação de Shaders foi 5 Sequência de unidades funcionais, onde cada etapa fornece um resultado que pode ser utilizado por outra unidade. 6 DirectX é a API e conjunto de bibliotecas gráficas desenvolvidas pela Microsoft para uso apenas em sistemas c para o console de jogos XBOX c Windowse 7 Multiplataforma é software que pode ser executado em ambientes ou sistemas operacionais diferentes, tais como Linux, Windows, Unix e MacOS. Usualmente necessita de compilação especı́fica para cada plataforma, porém é diferente de software desenvolvido para apenas uma única plataforma 8 desktop é expressão utilizada para computadores de mesa ou computadores portáteis (notebooks) que utilizam configurações similares a computadores de mesa 19 Figura 13: FIGURA DE JOGO DESENVOLVIDO COM OPENGL ES FONTE: (MUNSHI; GINSBURG; SHREINER, 2009, Color Plate 1) adicionada pela especificação de linguagem de programação especı́fica denominada OpenGL ES Shading Language. OpenGL e OpenGL ES são APIs para computadores desktop e dispositivos móveis respectivamente, porém, percebeu-se que havia necessidade de padrões ou API para computação gráfica disponı́vel para a Internet. Na tentativa de desenvolvimento de aplicativos que pudessem efetuar a renderização 9 no ambiente Internet foram desenvolvidos plugins, que pudessem ser instalados no navegador e não nativamente pelo próprio navegador (GRACIA JAVIER ; BAYO, 2012). A primeira tentativa para criação de um padrão para disponibilizar aplicações de Computação Gráfica na Internet foi o desenvolvimento da VRML , proposto por Ragget (RAGGETT, 1994), que estabeleceu um método para renderização de dados 3D utilizando marcações. Para que renderização tivesse efeito, havia necessidade de instalação de um plugin, como o popular Cortona VRML Viewer Client. O VRML foi então substituı́do pelo X3D desenvolvido pelo Web3D Consortium (WEB3D Consortium, 2012) (http://www.web3d.org). Mesmo sendo um padrão para definição da geome9 Renderização é termo derivado do verbo da lı́ngua inglesa “to render” que significa “apresentar as imagens no monitor de vı́deo” (RENDER, ). Termo foi mantido por ser termo comum e amplamente utilizado na literatura. 20 tria em XML 10 , a renderização do conteúdo dava-se por meio de plugins ou de applets Java. Os dados contidos dentro do documento HTML era renderizado por applet por meio da Máquina Virtual Java ou JVM. Atualmente, JVMs estão disponı́veis em vários sistemas operacionais, permitindo que aplicações sejam independentes de plataforma (GRACIA JAVIER ; BAYO, 2012, p.5). Mesmo com os desenvolvimentos de novas aplicações na tentativa de utilizar o ambiente OpenGL através de códigos Java, ainda assim havia o problema de que a máquina virtual JVM é uma camada que não acessa o hardware diretamente. Além disso, o navegador era simplesmente o meio para efetuar o download automático do byte code para applet ou plugin, mas o responsável pela renderização era o applet (GRACIA JAVIER ; BAYO, 2012, p. 5). WebGL então vem justamente suprir essa lacuna, tornando as aplicações independentes de plugins ou applets para renderização e eliminando a necessidade de uma camada a mais para acesso ao hardware, bem como da necessidade de quaisquer instalações de códigos ou ambientes de terceiros (plugins). 3.2 PIPELINE DE APLICAÇÃO WEBGL A figura 14 mostra o pipeline de aplicação desenvolvida em WebGL mostrando a comunicação entre ela (codificada em Javascript) e os principais elementos da WebGL que conduzem à renderização das imagens pela API WebGL. 3.2.1 Aplicação Web A aplicação Web é composta de vários elementos: • Código HTML ou tags HTML: são os elementos destinados à construção da página em si. O código HTML contém o elemento canvas que define o ambiente WebGL; • CSS 11 Folhas de estilo CSS para definir a aparência dos elementos HTML ; • Código Javascript que: – proverá os dados dos modelos; 10 XML: Extensible Markup Language ou Linguagem de marcação extensı́vel. Define conjunto de regras para definição de dados, atributos e valores, por meio da codificação de dados, principalmente para troca de informações entre diferentes aplicações. 11 Cascading Style Sheet ou Folha de estilos 21 Figura 14: PIPELINE DE APLICAÇÃO DESENVOLVIDA COM WEBGL FONTE: (ANYURU, 2012, p. 8) adaptado pelo autor – responderá aos eventos que possam ser disparados para o correto funcionamento da aplicação. • O código fonte dos shaders, inserido em tags especı́ficas. 3.2.2 WebGL API A API WebGL provê a comunicação entre a camada HTML e o código Javascript, per- mitindo que a execução dos shaders efetuem a renderização dos objetos modelados e contidos na Aplicação Web. O contexto WebGL é obtido a partir da tag canvas e operações da API são invocadas a partir desse contexto. 3.2.3 Shader de Vértices Shader de Vértices ou Vertex Shader é, segundo (MUNSHI; GINSBURG; SHREINER, 2009, p.4), o shader que executa código de propósito geral para manipulação dos vértices. É invocado para cada vértice e manipula dados por vértice (CANTOR; JONES, 2012, p.25). 22 Figura 15: DETALHES DA API WEBGL FONTE: (CANTOR; JONES, 2012, p. 24) adaptado pelo autor A figura 15 mostra esquematicamente como os dados são passados ao shader de Vértices : • Código fonte do shader escrito em OpenGL ES SL; • Dados dos vértices providos pelo código javascript usando matrizes de vértices (vertex arrays), denominados Vertex Buffer Objects (VBOs) 12 utilizando Atributes; • Uniforms - Dados constantes para todos os vértices e que são utilizados pelo shader. O código fonte do shader é escrito com OpenGL ES SL dentro de tags <script> onde o atributo type contendo o valor type="x-shader/x-vertex". Os Atributes13 são tipos de variáveis que “apontam” para os Vertex Buffer Object ou VBOs. É por meio dos Atributes que o código WebGL tem acesso aos dados definidos ou contidos nos VBOs. Em cada Ciclo de Renderização, os valores dos atributos são diferentes e executam o código do Shader de Vértice em paralelo na GPU. 12 Vertex Buffer Objects ou VBOs são objetos instanciados pelo código Javascript e que contém as coordenadas de vértices, valores de vetores normais, valores de cores, escalares e, dados especı́ficos do usuário. São definidos como matrizes e definem uma área de memória de uso especı́fico pelo shader de vértices 13 Attributes são traduzidos como atributos 23 Os Uniforms são variáveis de entrada para ambos os shaders de vértices e fragmento. Segundo (CANTOR; JONES, 2012, p.27), diferentemente dos Atributes, os Uniforms são constantes durante todo o Ciclo de Renderização, ou seja, enquanto os Attributes são diferentes para cada instância do shader de vértice, os valores do Uniforms são os mesmos para todas as instâncias tanto do shader de vértice quanto para o de fragmento (CANTOR; JONES, 2012, p.26). Um exemplo tı́pico é a posição de uma fonte de luz, que não muda tanto para o shader de vértices quanto para o de fragmento e, portanto, deve ser definido em uma variável do tipo Uniform. Quando é necessário passar dados do shader de vértice para o shader de fragmento, utilizam-se variáveis definidas como Varyings. Uma variável definida como Varying no shader de vértice, pode ser acessada pelo shader de fragmento com o mesmo nome. Dessa forma, valores calculados ou definidos no shader de vértice são aproveitadas no shader de fragmento. 3.2.4 Construção de Primitivas Conforme (ANYURU, 2012, p.12), o pipeline WebGL precisa montar os vértices já devidamente disponibilizados pelo shader de vértices em primitivas geométricas individuais, tais como linhas, pontos e triângulos. Para cada elemento geométrico, decide-se se ele está ou não está dentro da região de visualização 3D. A decisão é tomada se o elemento está contido no Tronco de visão: • Se o elemento está contido, ele segue para o próximo estágio do Pipeline; • Se o elemento está totalmente fora, ele é descartado; • Se o elemento está parcialmente contido, ele é “cortado” (clipping), de modo que apenas a parte que está contida siga para o próximo estágio. Na figura 16 é descrito o Volume de Visão (ou Tronco de visão), mostrando o volume onde os elementos devem estar contidos para serem construı́dos. 3.2.5 Rasterização Após a construção e definição das primitivas que devem ser renderizadas, elas são decompostas em partes menores denominadas fragmentos. Os fragmentos são, na verdade, os pixels que serão enviados ao shader de fragmento. 24 Figura 16: VOLUME DE VISÃO FONTE: (CANTOR; JONES, 2012, p. 25) adaptado pelo autor Um exemplo simples de como a Rasterização funciona é o de uma linha que é formada por dois vértices e que cobre dez pixels entre os vértices. No processo de rasterização, esta linha é dividida em dez pedaços, um pedaço para cada fragmento. A figura 17 mostra como é o processo de rasterização, decompondo em fragmentos a partir de três vértices para preenchimento da superfı́cie. Figura 17: EXEMPLO DE FRAGMENTO FONTE: (ANYURU, 2012, p.16) adaptado pelo autor Para cada pixel ou fragmento são definidos cor, coordenadas de textura e todos os outros elementos necessários para renderização. Os valores são determinados pela interpolação a partir dos valores dos vértices (ROST et al., 2006, p.15). 3.2.6 Shader de Fragmento O outro elemento programável do Pipeline WebGL é o shader de fragmento. 25 Figura 18: DIFERENÇA ENTRE SHADER DE VÉRTICES E DE FRAGMENTOS FONTE: http://flylib.com/books/en/2.940.1.39/1/ - adaptado pelo autor O shader de fragmento atua sobre os fragmentos e principalmente deve definir ou calcular a cor de cada fragmento presente entre os vértices, conforme mostrado na figura 17. A figura 18 mostra um exemplo da definição de cores estabelecidas pelo shader de fragmento. Basicamente cada fragmento é um pixel, mas evita-se utilizar o termo pixel, porque durante as operações sobre os fragmentos, alguns poderão ser descartados e não serão renderizados. Logo, apenas fragmentos que serão renderizados recebem o nome de pixel. A figura 15 mostra como valores são passados para o shader de fragmento : • Por meio de Uniforms, valores definidos pelo usuário/aplicação; • Por meio de Varyings, com valores obtidos ou definidos no shader de vértices. O código fonte do shader de fragmentos é escrito com OpenGL ES SL dentro de tags <script> onde o atributo type contendo o valor type="x-shader/x-fragment". 3.3 WEBGL E VISUALIZAÇÃO CIENTÍFICA A utilização de WebGL no contexto cientı́fico está em fase inicial, visto que a tecnolo- gia é recente. Percebe-se entretanto, que alguns artigos cientı́ficos mostram o potencial de uso desta nova tecnologia. Fazendo uma pesquisa no site de Periódicos da Capes (CAPES, 2012), constatou-se: 26 - Utilizando “busca por assunto”, contendo “WebGL” no Tı́tulo, marcando “Expandir meus resultados”, obtiveram-se os seguintes resultados : • Refinando pelo Tópico “WebGL” : Coleção Quantidade ACM Ano 10 2010 4 2011 5 2012 1 IEEE 10 2011 9 2012 1 Directory of Open Access Journals 2 2011 1 2012 1 SciVerse Science Direct (Elsevier) 1 Total 23 2012 1 • Refinando por “Three Dimensional Displays”, obtiveram-se seis artigos publicados; Atas de Congresso 6 2011 Total 6 6 • Refinando por “HTML5”: Atas de Congresso 6 2011 5 2012 1 Total 6 Entende-se com os números dos resultados obtidos pela pesquisa no site de periódicos da Capes que o uso desta nova tecnologia estão em fase inicial. Durante a execução deste trabalho, o ano de 2011 foi o que apresentou maior número de trabalhos listados, demonstrando que já há uma busca por aplicações de Visualização Cientı́fica que utilizam a tecnologia para apresentação de seus dados. 3.4 CONSIDERAÇÕES FINAIS O desenvolvimento de aplicações para computação gráfica, jogos, e Visualização Ci- entı́fica entram em novo patamar e paradigma com o advento da WebGL. Agora, o navegador 27 de internet passa a conter a infraestrutura necessária para disponibilizar a aplicação, sem necessidade de plugins ou qualquer outro elemento para suporte. Em contrapartida, o código deve ser escrito em JavaScript e será interpretado em tempo de execução, ou seja, não há código compilado em linguagem especı́fica para o computador. Dessa forma, a execução da aplicação pode ser comprometida pelo fato de Javascript ser interpretado, mas por outro lado, existem várias formas de prover os dados, inclusive remotamente. Percebe-se que WebGL pode acarretar uma revolução e novas oportunidades para desenvolvimento de aplicações. No contexto cientı́fico, percebe-se que trabalhos visando ao uso desta nova tecnologia estão apenas iniciando, visto que a tecnologia é recente, mas o potencial para desenvolvimento de novas aplicações é grande. 28 4 IMPLEMENTAÇÃO DO VISUALIZADOR A implementação do visualizador proposto neste trabalho transcorreu de modo que o resultado final atendesse ao objetivo de que a ferramenta pudesse renderizar as imagens em tempo hábil e compatı́vel com ambiente operacional de trabalho do meteorologista na Internet, utilizando WebGL. O desenvolvimento de visualizadores de dados para radar meteorológico em 3D não é um assunto por si só inédito. Outras ferramentas já foram desenvolvidas como em (ERNVIK, 2002). Contudo, as aplicações usualmente são desenvolvidas utilizando bibliotecas e linguagem C, que compilam e geram programas executáveis para uma plataforma especı́fica. c Esse tipo Por exemplo, programas que executam apenas em sistemas operacionais Windows. de desenvolvimento implica que não se pode ter aplicações fáceis de serem portadas para outros ambientes e mesmo não são desenvolvidas tendo o ambiente da Internet como ambiente de execução. Neste trabalho, foca-se no desenvolvimento de visualizador que possa ser utilizado na Internet sem uso de plugins ou qualquer outro software adicional além do navegador com suporte a WebGL. Apesar de trabalhos sobre uso de outras técnicas para apresentação dos dados utilizando Reconstrução de superfı́cies, como em (CESAR JR, 1994) e também o uso de criação de texturas, visando uma “falsa” impressão de dados tridimensionais como em (RU, 2007) implicam tempo para geração das imagens de 30 minutos (RU, 2007, p.44), o que é inviável em ambiente operacional, ou seja, não alcança o objetivo deste trabalho. Ainda, em (DOGGETT c para gerar as imagens, o que implica que o meteorologista IV et al., 2002), utiliza-se Matlab trabalhe com os dados e utiliza essa ferramenta para apresentação e visualização. São operações que não são úteis nas atividades operacionais. Percebe-se que técnicas que podem produzir imagens apreciadas do ponto de vista estético não são adequadas para uso em ambiente operacional. Dessa forma, opta-se neste trabalho por técnicas básicas, porém visando a apresentação da visualização dos dados de forma prática, bem como em ambiente de Internet. 29 Esse capı́tulo tem como objetivo apresentar a Metodologia e descrever a Implementação do protótipo do visualizador, utilizando WebGL. 4.1 METODOLOGIA Segundo a taxonomia da Computação Gráfica proposta por (GOMES; VELHO, 2008, p.2), a Modelagem Geométrica trata de descrever e estruturar dados geométricos no computador, enquanto que a Visualização (ou Sı́ntese de Imagens) gera a imagem a partir desse Modelo Geométrico. Ainda dentro desta taxonomia, processamento de imagens, trata uma imagem uma imagem e produz outra imagem como saı́da. A Visão Computacional tem como objetivo obter informações geométricas, topológicas ou fı́sicas a partir das imagens de entrada (GOMES; VELHO, 2008). A figura 19 mostra esquematicamente a Taxonomia da Computação Gráfica, segundo (GOMES; VELHO, 2008). Figura 19: TAXONOMIA DA COMPUTAÇÃO GRÁFICA FONTE: (GOMES; VELHO, 2008, p. 2) Um dos propósitos da Visualização, segundo (TELEA, 2008, p.8), é o de obter a compreensão por meio de gráficos e imagens que sejam interativos, relacionados com processos tais como simulações ou algum processo fı́sico do mundo real. Entende-se por um sistema interativo, que a partir dos dados fornecidos por modelos ou fornecidos por algum dispositivo de medida, esse sistema apresenta a imagem ao usuário reconstruı́da a partir dos dados fornecidos pelo dispositivo de medida. O usuário, por sua vez, interage com esta aplicação e com sua 30 observação, tem a compreensão do fenômeno modelado ou medido (TELEA, 2008, p.8,9). O processo de visualização pode ser resumido, segundo (TELEA, 2008, p.37) por: • Aquisição de dados de interesse em um conjunto de dados (dataset) discreto; • Mapear o conjunto de dados em primitivas gráficas; • renderizar as primitivas gráficas para obter a imagem desejada. A Aquisição de dados é feita por meio de um sensor ou equipamento de medida, ou ainda, um modelo numérico. A aquisição de dados normalmente fornece uma quantidade de dados superior ao que é possı́vel apresentar pelo sistema de visualização, pois os dados são obtidos de forma contı́nua, enquanto que o equipamento que reconstruı́ra a imagem necessita de dados em um domı́nio especı́fico. Desta forma, os dados precisam ser discretizados em um domı́nio finito. Nesta operação, deve-se definir não somente os pontos a serem visualizados nesse domı́nio finito, mas bem como a interpolação entre os pontos da discretização. Os pontos de discretização são chamados sample points ou pontos de amostragem e o conjunto desses pontos, bem como os valores de limites (máximo e mı́nimo) são denominados Dataset 1 (TELEA, 2008, p.40,41). O Mapeamento dos dados em primitivas gráficas consiste em, a partir de seus valores, associá-los ao elemento geométrico destinado para representar a informação. O mapeamento é feito pela definição de células, que são também escolhidas em função da escolha do tipo de Grid (ou Grade). Os principais tipos de células são ((TELEA, 2008, p.54): • Vértice • Linha • Triângulo • Retângulo • Tetraedro • Hexaedro • Paralelepı́pedo 1 Dataset significa literalmente conjunto de dados; o termo é utilizado aqui para descrever o conjunto de dados geométricos e que contém a informação propriamente definida pelos dados a serem observados 31 • Pirâmide • Prisma Os tipos de Grades básicos são : • Grade Uniforme • Grade Retilı́nea • Grade Estruturada • Grade Não-estruturada Neste trabalho, entendeu-se que se devia adotar uma implementação “conservadora” para verificar se a quantidade de dados poderia ser apresentada de modo que o processo de renderização pudesse ser efetuado em tempo hábil e que pudesse ser disponibilizado em ambiente operacional, conforme o primeiro objetivo especı́fico. O uso de técnicas de renderização de volume poderiam levar a um tempo muito grande para apresentar as imagens, causando algum tipo de desmotivação ao usuário. Dessa forma, tomaram-se as seguintes decisões quanto à geometria da grade de apresentação: • Uso de célula do tipo Vértice, onde cada Bin está em uma célula; • Uso de grade Estruturada; A célula de tipo Vértice é uma célula que representa um ponto. Optou-se por utilizar o ponto para que a renderização fosse efetuada rapidamente e acarretasse menor custo computacional por parte da placa gráfica (GPU). Dessa forma, cada bin é posicionado geometricamente sobre um vértice para representação dos dados na grade. A grade Estruturada foi escolhida em função de que os dados estão em coordenadas esféricas. Dados que estão em geometria ou coordenadas retilı́neas podem ser inseridos em grade do tipo Uniforme ou Retilı́neo. O sistema de coordenadas adotado foi o de coordenadas esféricas em três dimensões. Visto que a refletividade é uma grandeza escalar, medida e informada pelo hardware do radar meteorológico, pode ser apresentada apenas por mapeamento de cores (ou tabela de cores), visto que é a forma mais comum de representação desse tipo de dados, conforme (TELEA, 2008, p.129). 32 4.2 IMPLEMENTAÇÃO O principal objetivo deste trabalho é de prover uma ferramenta de visualização de dados de radar meteorológico em ambiente Web. Para isso,há necessidade de extrair os dados brutos fornecidos pelo conjunto hardware-software do radar e, a partir dos dados extraı́dos, fornecer estrutura de dados disponı́vel ao navegador de modo que o contexto WebGL possa renderizar a imagem correspondente aos dados. Figura 20: PIPELINE DO VISUALIZADOR FONTE: o Autor A figura 20 mostra o Pipeline do Visualizador. A aplicação é dividida em 2 partes, pois os dados do radar são fornecidos por programa em Java, que entrega dados para uma aplicação Javascript que é executada no navegador Internet compatı́vel com WebGL. O código desenvolvido em Javascript é dividido em : • Código da Aplicação; • Código de Biblioteca utilitária. 33 O Código da Aplicação é o código que está “embutido” na página da aplicação e é responsável por: • Inicialização de objetos; • Inicialização do contexto WebGL; • Preenchimento dos dados; • Renderização. O Código da Biblioteca Utilitária está em arquivo separado da página html e é responsável por: • Conter funções úteis; • Definição das classes de matrizes e vetores; • Definição da Classe WebGL; • Definição da Classe RadarGridRender; • Definição da Classe StructuredGrid. A figura 21 mostra o Diagrama de Classes UML 2 das Classes que definem o conjunto de objetos que serão responsáveis pela renderização dos dados. Classe WebGL Classe responsável por conter o contexto WebGL da página HTML e as definições de câmera, buffer de vértices e cores. Inicializa o contexto webGL, shaders e os buffers. Classe UniformGrid Classe que define um Grid Uniform (TELEA, 2008). É classe ancestral de StructuredGrid. Define o conjunto de dados para serem renderizados pela classe “Render”, havendo assim separação entre dados (dataset) e a classe que os renderiza e apresenta (SCHROEDER; YAMROM, 1994). Classe StructuredGrid Classe que define o Grid Estruturado, provendo o suporte para os dados do radar. 2 UML Unified Modeling Language ou Linguagem de Modelagem Unificada. Conjunto de sı́mbolos e definições estabelecidas por Ivar Jacobson, James Rumbaugh e Grady Booch para modelagem de aplicações 34 Figura 21: DIAGRAMA DE CLASSES FONTE: o Autor Classe GridRender Classe para renderização de um dataset; é a classe ancestral de RadarGridRender. RadarGridRender Classe responsável pela renderização dos dados do Radar. Point Classe que define um ponto com atributos de posição, bem como atributo de cor (color do ponto. ListPoints Classe define uma simple lista de pontos, definindo a geometria de cada elemento de informação do dataset. Define um tipo de célula para o grid por meio de seu conjunto de pontos. Color Classe que representa uma cor. 35 ColorTable Classe que representa uma tabela de cores para ser utilizada na renderização dos dados. As próximas seções detalham como essas classes e funções inter-relacionam-se para produzir a apresentação dos dados de radar no navegador. 4.2.1 Dados do Radar Os dados do radar são armazenados em arquivos contendo os dados em formato binário, c fornecedora do equipamento. compactados em formato especı́fico da empresa Sigmet, Para a aplicação de renderização, a extração de dados é efetuada pela leitura do arquivo dos dados do radar (que contém os dados brutos de leitura) e a partir desse arquivo, extrai-se o conjunto de elevações. Para cada elevação, extrai-se o conjunto de raios e de cada raio, os conjuntos de bins. Em cada bin, é extraı́do o valor da refletividade. A aplicação responsável pela extração dos dados é uma aplicação desenvolvida em Java. A comparação de Java com outras linguagens Orientadas a Objetos, mostra propriedades bem definidas sem alguns pequenos problemas encontrados em C++, conforme (NAMI, 2008). Quanto ao desempenho, o trabalho de (BULL et al., 2001) mostra que o desempenho em aplicações cientı́ficas está muito próxima de aplicações escritas em C ou Fortran. O formato dos dados de saı́da é o formato JSON 3 pela praticidade para conversão em objetos JavaScript, bem como pelo pouco uso de metadados (diferentemente de formatos baseados em XML). A figura 22 mostra o diagrama de classes contendo o relacionamento entre as classes que representam a saı́da dos dados após a leitura. Descrição dos atributos das classes : Classe dados • maxvalue : valor máximo da faixa de leitura dos dados; • minvalue : valor mı́nimo da faixa de leitura dos dados; • datahora : data e hora da leitura dos dados em horário GMT; • numelev : número de elevações contidas no conjunto de dados; 3 Javascript Object Notation - (INTRODUCING. . . , 2012) 36 Figura 22: DIAGRAMA DE CLASSES - DADOS DO RADAR FONTE: o Autor • numraysperelev : número de raios por elevação; • vols : lista contendo os dados de cada elevação Classe vol • elev : ângulo de elevação; • data : lista contendo dados dos bins Classe ray • valor de cada bin : valor lido do arquivo de dados do radar. Devido à notação JSON, não há necessidade de identificador e o próprio valor pode ser diretamente inserido na lista de valores de cada raio. 37 Exemplo de dados em formato JSON: ”maxvalue”:72.0,”minvalue”:-24.0,”datahora”:”01/04/2011 19:50”,”numelev”:1, ”numraysperelev”:360,”numbinsperray”:800,”vols”:[”elev”:0.50,”data”: [[-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-6.0,-4.0, ..... ], [-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-999.0,-6.0,-4.0 ..... ]] Os dados em formato JSON são disponibilizados para aplicação JavaScript que é executada no navegador. A notação JSON permite que os dados sejam carregados e “transformados” em objetos Javascript, sendo então transformados em objeto dados, composto por atributos simples e um atributo matriz (objeto Array) denominado vols. Cada elemento da matriz vols é um objeto do tipo vol, que contém um atributo denominado data, que é uma matriz de objetos ray, onde cada elemento é o valor do dado de um bin. Para efetuar os testes, foram extraı́dos os dados de cada elevação e armazenados em arquivos separados. Um arquivo contendo os dados de todas as elevações foi também criado. Desse modo, para apresentação dos dados, deve-se alterar o arquivo a ser carregado. 4.2.2 Criar Grade Esta etapa é responsável pela formação do dataset, ou seja, pelo conjunto entre a grade e os dados associados a esta grade. A primeira etapa no processo é o estabelecimento da grade, vinculada com a geometria dos dados, que por sua vez é baseada em coordenadas esféricas devido à captura dos dados fornecida pela etapa anterior de aquisição de dados. Os dados estão baseados em : • Alcance • Azimute • Elevação Alcance é dado pela multiplicação do intervalo entre bins e o número do bin. Azimute é o ângulo que corresponde ao raio onde são obtidos os dados. Faixa de valores é 0◦ a 359◦ . Elevação corresponde ao ângulo de elevação da antena de radar em relação à horizontal. 38 Com esses três valores obtêm-se coordenadas esféricas. O suporte para os dados é feito pela grade estruturada, conforme (TELEA, 2008, p.65). Tem-se então a grade, definindose todas as coordenadas para cada bin, em modo sequencial, ou seja, a partir do primeiro raio (ou azimute), calculam-se todos os bins desse raio; ao final de um raio, inicia-se o outro e assim sucessivamente. A estrutura de células é definida estabelecendo a estrutura geométrica sem vı́nculo com os dados (SCHROEDER; YAMROM, 1994) e (TELEA, 2008, p.89). Os dados são inseridos em uma estrutura construı́da pela instância de objetos DataAttribute, com comprimento igual ao comprimento dos dados adquiridos na etapa anterior. Com a estrutura de células e os dados, forma-se então a estrutura de Dataset, definida com a geometria da Grade e com os dados, sendo então definido o valor na instância da classe StructuredGrid, conforme (OLIVEIRA JR; SCHEER; SATO, 2012, p.9), sendo preenchido no objeto de renderização. 4.2.3 Calcular Matriz Esta etapa refere-se aos cálculos de perspectiva, rotação e translação necessários para visualização dos dados por meio do modelo de câmera implementado. A visualização dos dados ou objetos tridimensionais em um tela de computador é similar a câmera fotográfica (digital ou não) que registra cenas tridimensionais, sensibilizando um filme (ou sensor de captação digital) que é bidimensional. Para que exista o efeito de profundidade, distância e perspectiva há necessidade de definição de um modelo de câmera e de cálculos de perspectiva para correta representação. WebGL não possui definição para câmera ((CANTOR; JONES, 2012, p.105)), logo a implementação para os cálculos de matrizes de visualização e perspectiva precisam ser feitas explicitamente pelo desenvolvedor. Portanto, as operações de visualização e de cálculo de perspectiva precisam ser implementadas para que os objetos possam ser renderizados na tela. A visualização dos dados na tela é produzida mediante um conjunto de transformações lineares de espaço R3 do modelo de objeto para o espaço R2 do monitor ou tela onde serão projetados os elementos. Conforme (GOMES; VELHO, 2008, p.344-345), a definição de um modelo de câmera virtual genérico é um processo que envolve transformações entre sete sistemas de coordenadas, associados a sete espaços : Espaço do Objeto, Espaço de Cena, Espaço de Câmera, Espaço Normalizado (ou de Normalização), Espaço de Ordenação, Espaço de Ima- 39 gem e Espaço de Dispositivo. Espaços Os vários espaços determinam sistemas de coordenadas que têm aplicação especı́fica dentro do pipeline para apresentação dos dados. Espaço de Objeto é o espaço associado a cada objeto e cujo sistema de coordenadas depende da geometria do objeto. Espaço de Cena ou de Mundo é o sistema de coordenadas global, comum a todos os objetos. Espaço de Imagem é o espaço definido por um sistema de coordenadas no plano de projeção onde se encontra a tela virtual; O Espaço de Câmera é o espaço definido pelo sistema de coordenadas associado à projeção cônica, utilizado para definir a câmera virtual, ou seja, definir a posição e orientação da câmera em relação ao sistema global. Nesse sistema são definidos alguns parâmetros tais como Tela Virtual, Distância Focal e Centro de projeção. A posição da câmera é dada pelo Centro de Projeção ou Centro Ótico. Definindo um referencial a partir desse ponto, utilizando três vetores. Um dos vetores define o Eixo Ótico. O Plano de Projeção situa-se à distância d, denominada Distância Focal. Outros dois vetores, ~v e ~u complementam e formam o referencial. Figura 23: PLANO DE PROJECAO FONTE: (GOMES; VELHO, 2008, p.347) A figura 23 mostra o ponto C, os eixos de orientação e o Plano de Projeção. 40 O Espaço de Imagem é o espaço do Plano de Projeção do Espaço da Câmera. Na figura 23, percebe-se que o eixo ótico (eixo ~n) “fura” o Plano de Projeção no ponto P, denominado Ponto Principal, e com os vetores ~u e ~v, formam um referencial ortonormal. Define-se então uma “janela” retangular que é denominada Tela Virtual. O Plano de Projeção (ou Plano de Visão (FOLEY et al., 1990, p. 237)) é associado à sigla VPN, e o vetor~n é denominado Normal do Plano de Visão, utilizando a sigla VPN. Conforme a figura 24, têm-se: Q = (umin , vmin ) S = (umax , vmax ) A largura para a Tela Virtual é: lu = umax − umin Definindo su = l2u , então: 2su = umax − umin . De forma análoga, obtém a altura da tela virtual como: 2sv = vmax − vmin . O Volume de Visão é definido pela pirâmide formada pelo Centro de Projeção C e pelo Plano de Projeção, mostrado na figura 25. A parte (a) da figura mostra a Pirâmide de Visão. Um modelo de projeção genérico não contém a Pirâmide de Visão alinhada com o Eixo Ótico, ou seja, a altura da Pirâmide não está sobre o Eixo Ótico. Porém, como será visto adiante, neste trabalho adota-se o Eixo Ótico alinhado com o Volume de Visão. Figura 24: TELA VIRTUAL FONTE: (GOMES; VELHO, 2008, p.347) 41 Figura 25: VOLUME DE VISÃO FONTE: (GOMES; VELHO, 2008, p.348) São definidos dois planos na Pirâmide de Visualização, o Plano Anterior (ou Plano Próximo) e Plano Posterior (ou Plano Distante). A distância do ponto C (ver figura 23 até o Plano Anterior é denominada n e a a distância do ponto C distância ao Plano Posterior é denominada f (GOMES; VELHO, 2008, p.348). A figura (b) de 25 mostra os dois planos, que formam o Tronco de Pirâmide que é o Volume de Visão. Segundo (WATT, 2000, p.148), em termos práticos adota-se que o Plano Próximo coincidente com o Plano de Visão. A idéia principal do Volume de Visão é a de possibilitar o Clipping 4 , ou seja, apenas objetos que estão dentro desse volume terão projetados sobre a Tela Virtual e serão visualizados pelo observador. O Espaço Normalizado é o espaço utilizado para definir o Clipping dos objetos, selecionando aqueles que serão vistos ou renderizados. É formado pelo Volume de Visão, porém limitado por −z ≤ x ≤ z , −z ≤ y ≤ z e z variando de um valor mı́nimo até 1. Associando o vetor ~u ao eixo x, o vetor ~v ao eixo y e o vetor ~n ao eixo z, fica estabelecido um referencial para o Volume de Visão, e pode-se utilizar as coordenadas x, y e z. Esse espaço facilita as operações de recorte, bem como prepara para o Espaço de Ordenação. Os elementos geométricos desse espaço sofrem uma Transformação Projetiva, visando que os elementos sejam projetados sobre a Tela Virtual. O Espaço de Ordenação é o espaço que possui um sistema de coordenadas que visa facilitar a operação de visibilidade, determinando a posição de cada objeto na cena de modo que possa ser possı́vel a percepção de qual objeto está mais próximo ou distante. Basicamente, 4 Clipping significa literalmente um pedaço que foi cortado de algo. Em Computação Gráfica representa a operação que permite que apenas objetos que estão dentro do Campo de Visão da câmera sejam mostrados, ou seja, o sistema ou programa que está renderizando os objetos não mostra objetos que não podem ser visualizados. 42 é o espaço Normalizado que sofre uma “deformação” para que seja transformado em um Cubo, de modo que as operações para determinar a profundidade z dos elementos permitam classificar os objetos, identificando qual elemento está mais próximo da Tela Virtual (GOMES; VELHO, 2008, p.349-350). Esse espaço também é denominado Coordenadas de Projeção Normalizadas 5 ((WATT, 2000, p.159). Os valores permitidos para as coordenadas são valores −1 ≤ x, y, z ≤ +1. Figura 26: VOLUME DE VISÃO NORMALIZADO FONTE: (GOMES; VELHO, 2008, p.349), adaptado pelo Autor O Espaço do Dispositivo é o espaço do dispositivo gráfico que fará a apresentação dos objetos geométricos. Nesse espaço é feita uma transformação de modo que os dados projetados na Tela Virtual, sejam projetados no dispositivo. Câmera Virtual Para obter a projeção dos elementos geométricos no dispositivo, precisam ser calculadas as várias transformações lineares que “convertem” os pontos em cada um dos espaços mencionados anteriormente até o Espaço do Dispositivo, ou seja, fazem a mudança de coordenadas entre os vários sistemas até que a imagem seja renderizada no dispositivo. A figura 27 mostra dois diagramas mostrando as transformações entre os vários espaços e as matrizes que são necessárias para implementação da câmera em WebGL. A relação entre as transformações e os espaços propostos por (GOMES; VELHO, 2008) e o visto nos diagramas de (CANTOR; JONES, 2012, p.115) é : 5 NPC - Normalized Projection Coordinates 43 Figura 27: TRANSFORMAÇÕES ENTRE ESPAÇOS E IMPLEMENTAÇÃO FONTE: (CANTOR; JONES, 2012, p.115), adaptado pelo Autor • Model Transform e textitView Transform são transformações entre os espaços de Objeto e de Cena, e desse com o espaço de Câmera • Projection Transform e textitPerspective Division são transformações dos espaços de Câmera, Normalizado, Ordenação e de Imagem • Viewport Transform é a transformação para o espaço de Dispositivo. A figura 27 destaca que o modelo de câmera utilizado neste trabalho contém apenas duas matrizes que sintetizam as transformações entre os vários espaços, cabendo a última operação no dispositivo diretamente pelo shader de vértices aplicando as duas matrizes em cada vértice do objeto : • Matriz Modelo-Visualização (ou Model-View matrix) • Matriz de Perspectiva (ou Perspective matrix) Matriz Modelo-Visualização A Matriz Modelo Visualização ou Model-View é a matriz que efetua a translação do Sistema de Coordenadas da Câmera (ponto C na figura 23) bem como operações de rotação em relação aos eixos x, y e z, caso sejam aplicadas rotações na posição da câmera. Esta matriz está diretamente vinculada a forma de interação do usuário com o movimento da câmera dentro do Volume de Visualização. Dois modelos muito comuns são a câmera baseada nos ângulos de rotação em relação a origem e a câmera denominada LookAt6 . 6 Look At significa literalmente “olhar para” 44 O primeiro modelo, a câmera é fixa e apenas rotaciona em relação a seus eixos e baseia-se nas matrizes de translação da posição da câmera e dos ângulos de rotação em relação aos eixos coordenados. A matriz de translação ao ponto C = (Cx ,Cy ,Cz ): 1 0 0 Cx 0 1 0 C y T= 0 0 1 Cz 0 0 0 1 Denominando os ângulos rotação em relação ao eixo x como α, eixo y como β e eixo z como γ, tem-se a matrizes de rotação para cada eixo conforme (GOMES; VELHO, 2008, p. 87-88) e (WATT, 2000, p. 5) : 1 0 0 0 0 cos(α) − sin(α) 0 Rx = 0 sin(α) cos(α) 0 0 0 0 1 cos(β ) 0 sin(β ) 0 0 1 0 0 Ry = − sin(β ) 0 cos(β ) 0 0 0 0 1 cos(γ) − sin(γ) sin(γ) cos(γ) Rz = 0 0 0 0 0 0 0 0 1 0 0 1 A aplicação destas matrizes de rotação em cada eixo, tem-se a matriz resultante: cos(β ) cos(γ) cos(β ) sin(γ) R= − sin(β ) 0 cos(γ) cos(α) sin(β ) cos(α) cos(γ) sin(β )+sin(α) sin(γ) cos(α) cos(γ)+sin(α) sin(β ) sin(γ) − cos(γ) sin(α)+cos(α) sin(β ) sin(γ) cos(β ) sin(α) cos(α) cos(β ) 0 0 0 0 0 1 45 O modelo de câmera LookAt baseia-se na posição da câmera (ponto E também denominado Eye 7 ), no ponto de interesse (ponto C), ou seja, para onde a câmera está “olhando” e no vetor de referência e que posiciona a câmera para cima. Esta câmera tem a vantagem que permite mudar o ponto (ponto C) que se deseja observar, dando uma “sensação” de direção. Figura 28: CÂMERA “LOOKAT” FONTE: (LANDEMAN, 2008, p.3), adaptado pelo Autor Conforme (HILL JR, 2001, p.358-367) e (LANDEMAN, 2008), esse modelo de câmera é composto por três parâmetros : • Ponto de interesse C (Cx ,Cy ,Cz ) • Posição da câmera E (Ex , Ey , Ez ) • Vetor Up 8 , que indica qual é a posição da câmera, ou qual é a posição que indica a posição voltada para cima. A partir dos três parâmetros, os outros três vetores são criados para formar a base da câmera: os vetores ~n, ~v e ~u. Além disto, a origem do sistema passa a ser o ponto E, ou seja, o ponto da posição da câmera (LANDEMAN, 2008, p.11). • vetor n é o vetor obtido a partir do vetor entre os pontos C e ponto E. Deve-se normalizar o vetor. −→ CE ~n = −→ | CE | 7 Eye 8 Up da lı́ngua inglesa significa olho é expressão da lı́ngua inglesa que significa acima, para cima. 46 • vetor u é obtido fazendo o produto vetorial entre o vetor n e o vetor Up U; −→ U p ×~n ~u = −→ | U p ×~n | • vetor v é obtido pelo produto vetorial entre o vetor n e o vetor u. ~v =~n ×~u A figura 29 mostra os vetores da base. Figura 29: VETORES ~n,~u e ~v FONTE: (LANDEMAN, 2008, p.12), adaptado pelo Autor Deseja-se obter a matriz de Modelo Visualização para o modelo de câmera. Para isto, conforme (LANDEMAN, 2008) e (HILL JR, 2001), esta matriz corresponde a matriz formada pela rotação do sistema de coordenadas da câmera e pela translação do sistema de coordenadas desta câmera. A matriz de rotação é formada pelas componentes dos versores da base: ux uy uz 0 v v v 0 x y z R= nx ny nz 0 0 0 0 1 47 A matriz de translação da origem é dada pela matriz: 1 0 0 −ex 0 1 0 −e y T= 0 0 1 −ez 0 0 0 1 A matriz resultante M é o produto da matriz de translação pela matriz de rotação, ou seja, primeiramente translada-se e depois rotaciona-se. u u u −~e ·~u x y z v v v −~e ·~v x y z M= nx ny nz −~e ·~n 0 0 0 1 Esta é a matriz de Modelo-Visualização necessária para a transformação de visualização da câmera. Além dos pontos de interesse (ponto C) e da posição da câmera (ponto E), ainda pode-se utilizar os ângulos de Yaw, Roll e Pitch 9 . Yaw é o ângulo que estabelece a direção da câmera e é a rotação em relação ao eixo u. Roll é a giro em relação ao angulo longitudinal da câmera, ou seja, eixo dado pelo vetor ~n. Pitch é a inclinação da câmera em relação ao eixo v. Pela flexibilidade que o modelo de câmera proporciona para que o usuário possa interagir com o ambiente e a câmera, foi implementado esse modelo. A classe Camera contém os atributos que correspondem aos vetor ~n,~u e ~v. Logo, a matriz Modelo-Visualização é a matriz M da câmera LookAt. Esse modelo permite que se “navegue” pelo ambiente virtual, “passeando” com a câmera. Matriz de Perspectiva A matriz de perspectiva é a matriz que efetua as transformações entre os espaços de modo que o usuário tenha a sensação da perspectiva e profundidade da imagem que está sendo projetada na tela. Esta matriz efetua, como já mencionado, a transformação entre os Espaços de Câmera, Normalizado, de Ordenação e de Imagem. Antes das definições da matriz, faz-se necessário efetuar algumas definições de parâmetros da Câmera Virtual para estabelecer o modelo geométrico do Espaço de Câmera. 9 Esta nomenclatura para esses ângulos são denominações emprestadas de termos aeronáuticos e francamente utilizadas na denominação na literatura em Computação Gráfica, inclusive literatura em lı́ngua portuguesa. Dado isto, a nomenclatura foi mantida. 48 A matriz de perspectiva depende do modelo de Câmera selecionado. Para implementação, selecionou-se tipo de Câmera Câmera de Perspectiva 10 . Dentro desse tipo de câmera, optou-se pelo modelo de câmera definido pelo OpenGL, que possui as seguintes caracterı́sticas : • Eixo ótico coincidente com o Eixo de Visão • Ângulo de Visão determina a distância focal (distância até o plano próximo) • Todo ponto dentro do Volume de Visão é projetado no Plano de Visão, que está no Plano Próximo • O Sistema de Coordenadas Normalizadas encontra-se no centro do cubo normalizado que possui dimensões −1 ≤ x, y, z ≤ +1 . O Eixo Ótico coincidente com o Eixo de Visão facilita as transformações, visto que o Ponto Principal P coincide com o centro da Tela Virtual (ponto I na figura 24). A figura 30 mostra a configuração geométrica e posição do ponto P, inclusive com eixo de coordenadas e ponto C. Figura 30: EIXO ÓTICO FONTE: (HO, 2012b), adaptado pelo Autor O Ângulo de Visão é o parâmetro que permite identificar a distância focal, a partir de simples cálculos trigonométricos, e que definem outros parâmetros da câmera que são a distância focal, largura e altura da Tela Virtual. A figura 31 mostra a altura da tela virtual. Pode-se obter o valor pela relação ((GOMES; VELHO, 2008, p.351)): 10 Outros modelos ou tipos de câmera existentes: câmera afim, câmera de perspectiva frace (weak perspective), câmera ortográfica ((GOMES; VELHO, 2008, p.343) 49 α = 2arctg α PA PA ⇐⇒ tg( ) = CP 2 CP (4.1) Onde : CP é a distância focal, que é a distância até o Plano Próximo; PA é a altura da Tela Virtual sv Observação : A Tela Virtual é definida como tendo formato quadrado. Apenas na transformação para o Espaço do Dispositivo, é que a relação de aspecto 11 é aplicada e são obtidas os valores de largura e altura da Tela Virtual a partir das informações fı́sicas do dispositivo gráfico onde a imagem será apresentada. Então α su tg( ) = 2 −n (4.2) α sv tg( ) = 2 −n (4.3) E Figura 31: ÂNGULO DE VISÃO FONTE: (GOMES; VELHO, 2008, p.367), adaptado pelo Autor A figura 32 mostra os dois volumes: Volume de Visão e o Cubo com coordenadas normalizadas. Observa-se que o sistema de coordenadas normalizadas tem o eixo z apontando em direção contrário ao eixo z do sistema de coordenadas do Volume de Visão. 11 Relação entre largura total da tela com a sua altura 50 Figura 32: COORDENADAS NORMALIZADAS FONTE: (HO, 2012b), adaptado pelo Autor Transformação da Câmera Com a escolha do modelo similar ao utilizado pelo OpenGL, pode-se simplicar algumas transformações, pois estas transformações já contemplam transformações em mais de um espaço. A figura 33 mostra os vários espaços e sistemas de coordenadas onde serão aplicadas e calculadas as transformações. Figura 33: PIPELINE DE ESPAÇOS DE TRANSFORMAÇÃO FONTE: o Autor A Transformação da Câmera é uma transformação projetiva que é o conjunto das várias transformações entre os vários espaços, a partir do Espaço de Cena (ou Global ou de Mundo). A Transformação do Espaço de Objeto para o Espaço de Cena é uma Transformação nãoprojetiva. Então faz-se necessário obter cada uma das transformações entre os espaços que efetuam a projeção do objeto na Tela Virtual. 51 Busca-se então uma matriz de transformação de modo que transforme pontos no sistema de coordenadas de mundo no R3 para o espaço R3 do Espaço de Tela: xndc xe y y ndc e = M pro j zndc ze wndc we Onde • xndc , yndc e zndc são as coordenadas do ponto no espaço normalizado do dispositivo • a matriz M pro j é a matriz de projeção que transforma os pontos no Espaço de Cena no Espaço do Dispositivo. Observam-se os termos wndc e we , que são termos devido a notação de Coordenadas Homogêneas 12 Esta matriz é a matriz formada pelas várias matrizes de cada transformação entre cada espaço. Transformação para Espaço Normalizado e de Ordenação Precisa-se obter uma transformação (ou matriz de transformação) entre o Espaço de Cena e os Espaços Normalizado e de Ordenação. Busca-se portanto uma matriz 4 x 4, denominada S. Chamando um ponto qualquer Pc = (xc , yc , zc ), esse é dado por: xc xe y y c e = S zc ze wc we A figura 34 mostra esquematicamente a projeção de ponto Pe = (xe , ye , ze ) na Tela Virtual. O Ponto Pc = (xc , yc , zc ) na Tela Virtual é calculado a partir da semelhança de triângulos, formados pelas coordenadas dos pontos. 12 Coordenadas Homogêneas foram introduzidas por August Ferdinand Möbius para facilitar o cálculo de perspectivas, representando um Espaço de dimensão N com N+1 coordenadas. Desta forma, um ponto (X,Y) em coordenadas cartesianas é representado por (x,y,w) em coordenadas Homogêneas. Para converter novamente para Coordenadas Cartesianas, aplicam-se : X = x/w e Y = y/w. Com estas coordenadas é possı́vel ter um ponto “movido” para o infinito dado por (x,y,0). (GOMES; VELHO, 2008, p.41) (HO, 2012a) 52 Figura 34: PROJEÇÃO DE PONTOS NA TELA VIRTUAL FONTE: (HO, 2012b), adaptado pelo Autor Para a coordenada xc xe xc = −n −ze xe − n xc = −ze (4.4) (4.5) Para normalizar, efetua-se a divisão pelo metade da largura da tela virtual su . Tem-se : xc = xe − n −ze su (4.6) Da equação 4.2, a equação 4.6, tem-se: xc = xe −zetg( α2 ) (4.7) Para a coordenada yc e utilizando 4.3, tem-se: yc = ye −zetg( α2 ) (4.8) Percebe-se que as duas equações tem um divisor comum: ze . Como devemos expressar nossa matriz em coordenadas homogêneas, tem-se : wc = −ze (4.9) 53 Então, reescrevendo xc e yc , tem-se: xc = xe tg( α2 ) (4.10) yc = ye tg( α2 ) (4.11) Para o termo zc , a dedução é um pouco mais complexa pois deve-se permitir que visualmente, a sensação de profundidade seja mantida após aplicada a normalização. Supondo uma relação linear entre zc e ze , pode-se expressar: zc = Aze + B (4.12) Sabe-se que um dos parâmetros da câmera é justamente a normalização do espaço de Ordenação em um cubo com dimensões −1 ≤ x, y, z ≤ +1. Para normalizar, divide-se por −ze . zc = Aze + B −ze (4.13) Então, conhece-se 2 valores para ze na normalização: Quando −ze = −n, zc = −1 e quando −ze = − f , zc = +1. Logo: −1 = Aze + B −n (4.14) +1 = Aze + B −f (4.15) A=− f +n f −n (4.16) B=− 2fn f −n (4.17) f +n 2fn ze − f −n f −n (4.18) Obtem-se: Então: zc = − 54 A matriz S é dada por : S= 1 tg( α2 ) 0 0 0 0 1 tg( α2 ) 0 0 0 0 0 0 +n fn − ff −n − 2f −n −1 0 Transformação para Espaço de Tela A transformação para o Espaço de Tela deve levar em conta que o Espaço de Tela é regido pelas coordenadas fı́sicas do Dispositivo. Busca-se portanto uma matriz 4 x 4, denominada D que efetua a tranformação do Espaço de Ordenação para o Espaço do Dispositivo. Chamando um ponto qualquer na Tela do Dispositivo de Pd = (xd , yd , zd ), esse é dado por: x d y d −1 =D zd wd xc yc zc wc Figura 35: COORDENADAS DE DISPOSITIVO FONTE: o Autor Na figura 35, temos as dimensões da tela são xmin , xmax , ymin e ymax . Do Espaço Normalizado, temos que as coordenadas da Tela Virtual, são definidas pelos pontos (-1,-1), (+1, -1), (+1,+1) e (-1,+1). Como a Tela Virtual é menor que a Tela Real do Dispositivo, precisa-se estabelecer uma relação linear de escalonamento para as coordenadas x e y. 55 Tem-se para a coordenada xd : xd = Axc + B (4.19) Mapeando, tem-se: xmax = A · 1 + B xmin = A · (−1) + B (4.20) Conduzindo a : A= xmax − xmin 2 B= xmax + xmin 2 (4.21) Aplicando na equação 4.19, temos: xd = xmax − xmin xmax + xmin xc + 2 2 (4.22) Aplicando o mesmo para a coordenada yd , temos: yd = ymax − ymin ymax + ymin yc + 2 2 (4.23) O dispositivo ou tela não possui nada relacionado com a coordenada z. Então a matriz D−1 é composta por: xmax −xmin 2 −1 D = 0 0 ymax −ymin 2 0 xmax +xmin 2 ymax +ymin 2 0 0 0 1 0 0 0 0 1 Porém toda a dedução foi feita mapeando-se o ponto da Tela Virtual para a tela do dispositivo, mas precisa-se da Transformação do dispositivo para a tela Virtual. Deve-se portanto, obter a matriz Inversa de D−1 56 2 xmax −xmin 0 0 0 2 ymax −ymin 0 xmax +xmin xmax −xmin ymax +ymin ymax −ymin 0 0 1 0 0 0 0 1 D = (D−1 )−1 = A matriz de transformação projetiva M pro j é então definida como ((LENGYEL, 2004, p.127)) : Mproj = D · S 0 0 0 xmax +xmin xmax −xmin ymax +ymin ymax −ymin − ff +n −n fn − 2f −n 0 −1 0 2n − (xmax −x min )su 0 0 2n − (xmax −x min )sv 0 0 Mproj = (4.24) Implementação A implementação da câmera (matrizes e transformações) é feita na classe Camera. Também a classe WebGL define atributos e métodos responsáveis pela visualização dos objetos dentro do contexto WebGL. A instância de Camera é utilizada pela classe WebGL por meio do atributo camera desta. A figura 36 mostra as duas classes. Na classe WebGL, os atributos que definem os parâmetros da câmera são : • nearPlane : plano Próximo do volume de visualização; • farPlane : plano Distante do volume de visualização; • angVis : ângulo de Visão. Esses valores podem ser alterados pelos métodos setNearPlane, setFarPlane e setAngVis, mas no momento da inicialização do objeto WebGL pelo seu constructor 13 , o plano Próximo e o plano Distante são setados em 1 e 10000 respectivamente, enquanto o valor do Ângulo de Visão é iniciado em 45 ◦ . A classe WebGL representa o contexto para renderização de objetos no navegador. Para efetuar a renderização, o método drawObject, recebendo como parâmetro a instância do 13 Constructor atributos é o método especial responsável pela criação da instância da classe. Pode ou não inicializar 57 Figura 36: CLASSE WEBGL E CLASSE CAMERA FONTE: o Autor objeto RadarGridRender. Esse método é o método-chave no cálculo da matriz, pois invoca o método perspective definido em WebGL, calculando a matriz de perspectiva da câmera e inserindo no atributo pmatrix de WebGL. O cálculo da matriz de perspectiva é efetuado pela função utilitária makeperspective, que recebe 4 parâmetros : Ângulo de Visão, razão de aspecto, posição do plano próximo e posição do plano distante. O método makeperspective utiliza o ângulo de visão e a razão de aspecto para calcular os valores de xmax , xmin , ymax , ymin utilizando as equações 4.3 para o cálculo de ymax . O valor de ymin é definido com −ymax , pois na equação 4.3, sv é definido como sendo metade da altura da tela. A partir dos valores de ymax e ymin , obtem-se xmax multiplicando ymax pela Relação de Aspecto e xmin multiplicando ymin pela Relação de Aspecto. O cálculo da matriz de Perspectiva (4.2.3) é feito por meio da function makeFrustum, que é invocada logo após os cálculos de ymax , ymin , xmax e xmin , sendo seu resultado inserido no atributo pmatrix. Após o cálculo da matriz de perspectiva, é invocado o método draw do próprio objeto RadarGridRender. Nesse método é efetuado o cálculo da translação e rotação em relação aos eixos, sendo o resultado inserido no atributo mvMatrix. Os valores dos atributos pMatrix e mvMatrix são setados nos uniforms do shader de 58 vértices pelo método setUniforms da classe WebGL. Esse método primeiramente obtém os valores das matrizes na forma de uma matriz de valores de ponto flutuante (float)e depois invoca uniformMatrix4fv do objeto do contexto WebGL. Esse método vincula a matriz de float com a variável uniform definida no shader de vértice e shader de fragmento. O trecho de código abaixo mostra as operações para ambas as matrizes e seus uniforms: f = new Float32Array(this.mvMatrix.getValuesByColumns()); this.gl.uniformMatrix4fv(this.shaderProgram.mvMatrixUniform, false, f); f32 = new Float32Array(this.pMatrix.getValuesByColumns()); this.gl.uniformMatrix4fv(this.shaderProgram.pMatrixUniform, false, f32); O uso de uniforms disponibiliza as matrizes para o shader de vértices como um valor constante para todas as instância do shader de vértices. Enquanto que para cada vértice, WebGL cria e executa o código do shader de vértice em paralelo com outros vértices. Os valores dos atributos de vértices são obtidos na próxima etapa - Extrair Vértices. A classe Camera define métodos resposáveis pelo posicionamento da câmera, bem como de cálculos da matriz de Modelo-Visualização : • setLook : seta o atributo look, que define o ponto de interesse (ponto C); • setPos : seta o atributo pos, que é a posição da câmera (ponto E) • setUp : seta o atributo up que é o vetor Up. • move : move a câmera no eixo do vetor ~n, ou seja, no eixo do ponto de interesse (C) e da posição da câmera (E). • yaw : efetua rotação do ângulo de Yaw, calculando rotação em relação aos eixos ~n e ~u em relação ao eixo ~v; • roll : efetua rotação do ângulo de Roll, calculando rotação em relação aos eixos ~u e ~v em relação ao eixo ~n; • pitch : efetua rotação do ângulo de Pitch, calculando rotação em relação aos eixos ~n e ~v em relação ao eixo ~u; • update é o método que recalcula os vetores ~n, ~u e ~v. Esse método deve ser invocado após alteração de qualquer dos principais atributos Look, Pos e Up. É invocado internamente. • updateMV é o método que atualiza a matriz Modelo-Visualização. 59 A classe WebGL deve receber a instância da classe Camera no seu atributo camera de modo que possa ser utilizada no momento de “desenhar” os objetos. A última etapa da figura 27 é efetuada pelo código executado pelo shader de vértice, por meio da obtenção da posição do vértice obtido pela multiplicação das matrizes de ModeloVisualização e de Perspectiva pela posição do vértice. O trecho de codigo do shader de vértice abaixo mostra esta etapa: gl\_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); Onde gl position é variável pré-definida pelo WebGL é corresponde a posição de um vértice; uPMatrix é o nome da variável uniform para a matriz de Perspectiva; uMVMatrix é o nome da variável uniform para a matriz de Modelo-Visualização obtida do atributo camera de WebGL aVertexPosition é o nome da variável attribute para o vértice que está sendo calculado. vec4 é tipo de dado do WebGL para vetores com 4 dimensões, normalmente para multiplicação de coordenadas afim. Deve-se observar que há um valor 1.0 setado na última posição de vec4. Isto é necessário para efetuar a correta multiplicação pelas matrizes. Com isto, finaliza-se a etapa de multiplicação de matriz para efeitos de perspectiva do objeto a ser apresentado, sendo o objeto correspondente aos dados do radar. 4.2.4 Extrair Vértices Esta etapa prepara os Vertex Buffer Objects (VBOs) para os vértices definidos no dataset. Os pontos são extraı́dos das coordenadas da Grade e setados nos VBOs, e desta forma, renderizado. Para isto, as seguintes operações são definidas: • Criação de variável tipo attribute no shader de vértices; • Criação de VBO; • Preenchimento do VBO durante a execução 60 Criação de attribute A definição da variável do tipo attribute é efetuada no código doshader de vértices. Para os vértices, a variável denominada aVertexPosition é criada com o trecho de código: attribute vec3 aVertexPosition; A variável é definida com sendo do tipo vec3, que significa que é uma variável vetor, contendo três dimensões, x, y e z. Durante a execução do código, o contexto WebGL recebe o valor de cada um dos vértices a partir do buffer VBO definido no código Javascript. Criação do VBO A criação do buffer (VBO) é efetuada durante a execução do método initbuffers da classe WebGL . O método é invocado pelo método initGl. A criação de um buffer VBO é muito simples, pois é simplesmente por meio do método createBuffer do contexto WebGL. O trecho de código abaixo mostra como foi implementado: this.bufferVertices = this.gl.createBuffer(); Onde : • this é uma referência ao próprio objeto, que nesse caso é o objeto da classe WebGL; • this.bufferVertices é o nome do VBO, que é um atributo da classe WebGL; • this.gl é o atributo do contexto WebGL da classe WebGL • createBuffer é a chamada ao método de criação do buffer. Preenchimento do VBO Uma vez criado, o buffer deve ser preenchido com os vértices durante a execução do código. Isto é efetuado a partir da matriz contendo os vértices utilizando o método bindBuffer do contexto WebGL. Esta extração de vértices e preenchimento do VBO é efetuada dentro do método draw logo após o cálculo das matriz de posicionamento e perspectiva da câmera (ver 4.2.3), utilizando a função utilitária loadBuffersFromObj. 61 A função loadBuffersFromObj recebe 4 parâmetros: • variável do contexto WebGL • a instância do objeto a ser renderizado • variável de referência do shader de vértices • Buffer de Vértices • Buffer de Cores Onde: A variável do contexto WebGL é o atributo context da instância do objeto WebGL. A instância do objeto é a instância de RadarGridRender que é responsável por conter os atributos do objeto a ser renderizado, que é o objeto contendo os dados (dataset), bem como atributos de posição do objeto. Os vértices são definidos pelos dados contidos no dataset. O buffer de Vértices é o buffer WebGL que conterá os valores dos vértices definido anteriormente. Corresponde ao atributo bufferVertices do objeto da classe WebGL. Para efetuar a extração dos vértices do objeto são seguidos os passos abaixo : • Invoca-se bindBuffer do contexto WebGL; • Os vértices são obtidos do objeto (parâmetro obj); • Invoca-se o método bufferdata do contexto WebGL; • Invoca-se o método vertexattribpointer. BindBuffer é método do contexto WebGL (conforme (KhronosGroup Inc, 2011)) que recebe 2 parâmetros: o tipo de dados (array (matriz) ou elemento) e a referência ao buffer. No código desenvolvido, o tipo de dados é o ARRAY_BUFFER, indicando que os dados devem ser tratados com matriz. A referência ao buffer é o parâmetro bufferVertices. Os vértices são extraı́dos e inseridos em uma variável temporária mbuffer em forma de matriz pelo uso do método getVertexAsArray do objeto , no caso, a instância de RadarGridRender. A variável é então preenchida com a sequência de todos os vértices do objeto, onde cada elemento da matriz é uma coordenada do vértice. 62 O método bufferdata do contexto WebGL preenche o buffer de vértices. Similar ao que acontece com códigos de OpenGL, bufferdata insere os valores no buffer previamente definido por meio da função bindBuffer, no caso bufferVertices. São ainda definidos dois atributos de bufferVertices: itemSize e numItems. Itemsize é o tamanho de cada item da matriz, que no caso é três devido as três dimensões (ou coordenadas) que define cada um dos vértices. NumItems é o número de itens da matriz, que é o comprimento da matriz dividido por três. O método vertexattribpointer é o método do contexto WebGL que preenche (ou prepara para preenchimento durante a execução do shader de vértices) segundo ((CANTOR; JONES, 2012, p.33)). uma variável do shader de vértices. No código tratado nesta etapa, a variável attribute é aVertexPosition definida no shader de vértices com o buffer corrente (definido por bindBuffer). O método recebe 4 parâmetros: a variável associada à variável attribute do shader de vértices, o comprimento do buffer, o tipo de dado de cada posição do buffer, o tamanho do passo e o “offset” ou ponto de inı́cio do buffer. A variável associada a variável attribute do shader de vértices é definida pelo método initShaders, invocado na inicialização do ambiente WebGL. O trecho de código abaixo demonstra como é efetuado : this.shaderProgram.vertexPositionAttribute = this.gl.getAttribLocation(this.shaderProgram,"aVertexPosition"); Percebe-se que a variável do tipo attribute “aVertexPosition” do shader de vértices está associada com shaderProgram.vertexPositionAttribute. O trecho de código abaixo da função utilitária loadBuffersFromObj mostra as operações efetuadas: webGL.bindBuffer(webGL.ARRAY_BUFFER, bufferVertices); var mbuffer = obj.getVertexAsArray(); webGL.bufferData(webGL.ARRAY_BUFFER, new Float32Array(mbuffer), webGL.STATIC_DRAW); bufferVertices.itemSize = 3; bufferVertices.numItems = mbuffer.length / 3; webGL.vertexAttribPointer(shaderProgram.vertexPositionAttribute, bufferVertices.itemSize, webGL.FLOAT, false, 0, 0); Com este conjunto de operações, os vértices são extraı́dos do objeto, transformados em VBO e passados ao shader de vértices. 63 4.2.5 Aplicar Tabela de Cores Esta etapa aplica a tabela de cores, definida no momento da inicialização, a cada um dos vértices do dataset do objeto RadarGridRender. A tabela de cores é definida na function criarRadarGridRender, que inicializa a origem e também define a tabela de cores pelo método setColorTable definido na classe RadarGridRender. Similar a etapa anterior, quando os vértices foram setados no buffer (VBO), a cor de cada vértice deve ser setado em um buffer (VBO). A própria função utilitária loadBuffersFromObj contém as chamadas similares a etapa anterior, porém a matriz temporária é preenchida com os dados de cores, onde, para cada vértice, tem-se o valor para red (vermelho), green (verde) e blue (azul), que compõem a cor de um vértice. Criação de attribute A definição da variável do tipo attribute é efetuada no código do shader de vértices e é denominada aVertexColor, criada com o trecho de código: attribute vec4 aVertexColor; Criação do VBO A criação do buffer (VBO) é efetuada durante a execução do método initbuffers da classe WebGL . O método é invocado pelo método initGl. A criação de um buffer VBO é muito simples, pois é simplesmente pelo método createBuffer do contexto WebGL. O trecho de código abaixo mostra como foi implementado: this.bufferCores = this.gl.createBuffer(); Onde : • this é uma referência ao próprio objeto, que neste caso é o objeto da classe WebGL; • this.bufferCores é o nome do atributo da classe WebGL que conterá as cores de todos os vértices; 64 • this.gl é o atributo do contexto WebGL da classe WebGL • createBuffer é a chamada ao método de criação do buffer. Preenchimento do VBO Após a extração dos vértices (conforme a etapa anterior), a função loadBuffersFromObj preenche o buffer e associa à variável do shader de vértices. O trecho de código mostrado a seguir demonstra como é efetuado: webGL.bindBuffer(webGL.ARRAY_BUFFER, bufferCores); mbuffer = obj.getColorAsArray(); webGL.bufferData(webGL.ARRAY_BUFFER, new Float32Array(mbuffer), webGL.STATIC_DRAW); bufferCores.itemSize = 4; bufferCores.numItems = mbuffer.length / 4; webGL.vertexAttribPointer(shaderProgram.vertexColorAttribute, bufferCores.itemSize, webGL.FLOAT, false, 0, 0); Percebe-se que o código é muito similar ao código mostrado da seção anterior, porém agora a variável temporária mbuffer é preenchida com a matriz obtida por meio de getColorAsArray. Também nota-se que o buffer de cores (bufferCores) tem comprimento de cada item (itemsize) igual a quatro, pois as cores são compostas de quatro atributos: Red (vermelho), Green (verde), Blue (azul) e Alpha , que é a intensidade. 4.2.6 Render A apresentação da imagem dentro do contexto WebGL é a parte final do método draw da instância de RadarGridRender. Após as etapas do cálculo da matriz de Perspectiva e de Modelo Visualização e após os buffers serem preenchidos com os vértices e cores, deve-se invocar o método drawArrays do contexto WebGL, conforme o trecho de código abaixo: context.gl.drawArrays(context.gl.POINTS, 0, context.bufferVertices.numItems); Onde: context.gl é o atributo que corresponde ao contexto WebGL ; 65 drawArrays é o método responsável pela renderização. Invoca os shader de vértices e de fragmento no pipeline do WebGL ((KhronosGroup Inc, 2011)) context.gl.POINTS é um valor constante que define que serão renderizados pontos 0 é o primeiro elemento a ser renderizado context.bufferVertices.numItems é o comprimento ou número de vértices a serem renderizados. Invocando o método, várias instâncias do shader de vértice são criadas e gerenciadas pelo WebGL. O mesmo ocorre para o shader de fragmento, renderizando a imagem dos dados do radar na página html da aplicação. 4.2.7 Codificação da Aplicação Descreveu-se até o momento todo o pipeline do Visualizador, descrevendo-se o con- junto de classes e funções denominadas utilitárias e que foram encapsuladas na biblioteca utilgl.js. Também foram descritos os shaders que efetuam a renderização dos vértices e fragmentos. Também descreveu-se o leitor de dados de radar, que é responsável pela extração dos dados do radar, entregando em formato JSON de modo que sirva de modelo para renderização pelo contexto WebGL utilizando o conjunto de classe e funções utilitárias. A aplicação do Visualizador foi desenvolvida utilizado o conjunto de classes e funções utilitárias e também dos shaders dentro do arquivo html denominado visualizador.html. A função start() é a função responsável por iniciar ambiente, inicializando o modelo de dados, o contexto WebGL (pela classe WebGL) e os objetos para representação do dataset do radar. Esta função é invocada tão logo a página HTML seja apresentada pelo evento onload da tag body. Abaixo, código da function start(): function start(){ camera = new Camera(0,0,0,0,0,0, 1,0,0); resetCamera(false); criarDadosFromJson(); criarRadarGridDataset2(); criarRadarGridRender(new V3(px - 1000 ,py - 2300, pz +0 )); .... 66 w= new WebGl(); var cv = document.getElementById("canvasApp"); w.initGl("canvasApp", backgroundcolor); .. w.setBackgroudColor(backgroundcolor) ; ///Color.COLOR_BLACK); mostrarRadarGrid(); } Os passos para apresentação dos dados do radar : • inicializar o objeto de camera; • obter os dados via JSON e criar o dataset; • invocar a função criarRadarGridDataset2 para criação do objeto da classe RadarGridRender, que é responsável pela renderização dos dados de radar; • criar o objeto da classe WebGL, inicializando por meio do método initGl e setando a cor de fundo com preto; • chamando a função mostrarRadarGrid para mostrar os dados Outra função importante é a função updateScene(), que é a função responsável pela atualização dos dados na tela. function updateScene() { w.camera = camera; w.clear(); mostrarRadarGridRender(); } function drawCurrentObj() { w.drawObject(currentObj); } Acima, tem-se código extraı́do das duas funções: updateScene e drawCurrentObj. 67 A função updateScene é a função que efetua a renderização, onde a instância de câmera é passada no atributo camera de WebGL. A função drawCurrentObj desenha o RadarGridRender na tela. 4.2.8 Exemplo de visualização Para inicializar o visualizador, basta carregar a página HTML por um servidor web tal como Apache 14 ou Light HTTP 15 , ou qualquer outro servidor de páginas HTML. O uso de um servidor é necessário por razões de segurança do WebGl que não permitem acesso diretamente. Logo, mesmo que a aplicação em código HTML seja executada na mesma máquina, deve-se ter um servidor de aplicações ou de páginas disponibilizando a página. A opção selecionada para os testes foi o Apache Tomcat, que é um servidor de páginas JSP 16 mantido pela Fundação Apache. Logo, para acessar a página, deve-se utilizar a URL que contém o contexto da aplicação, no caso http://localhost:8080/testeswebgl2/visualizador.html. A figura 37 mostra um exemplo de visualização da primeira elevação, ângulo de 0, 5◦ , mostrando toda a tela do visualizador. Na parte superior, tem-se a imagem com visualização inicial, apresentando os dados de radar da reflectividade 2.1.2. Ao lado direito tem-se a tabela de cores utilizada, variando de -24 a +72, onde -24 é o menor valor, indicando pequenos hidrometeoros e +72 é o maior valor, indicando tempestade extrema. A figura 38 mostra a seção da imagem e da tabela de cores adotada. A figura 39 mostra a seção central da página do visualizador. Nesta seção, tem-se as coordenadas da Câmera em X, Y e Z e também do ponto LookAt que é o ponto de interesse C da câmera. O usuário tem o botão “Alterar Câmera”, que permite que o usuário possa manualmente inserir valores de coordenadas. Além do botão, tem-se outros dois botões: “Posição inicial” e “Visão Satélite” que auxiliam na forma de visualização. O botão “Posição inicial” reposiciona a câmera em visão inclinada em relação ao radar, 14 mantido pela Fundação Apache de projetos código aberto. Disponı́vel em http://httpd.apache.org/ de servidor web código aberto. Disponı́vel em http://www.lighttpd.net/ 16 JSP Java Server Pages. Tecnologia que permite a escrita de páginas utilizando código HTML e também código que permite apresentar conteúdo dinâmico. Necessitam de servidor de aplicações para serem “transformadas” em código HTML puro e serem apresentadas em navegador de Internet 15 Projeto 68 Figura 37: VISUALIZADOR FONTE: O Autor no ponto em que é iniciado o visualizador, enquanto o botão “Visão Satélite”, posiciona a câmera em visão perpendicular, posicionada em coordenada distante do visualizador, simulando uma câmera ou visão a partir de “Satélite fictı́cio”. No lado esquerdo desta seção, tem-se a caixa de checagem “Permite navegação”, que habilita ou desabilita a navegação pelo usuário. O mecanismo para permitir ou não a navegação deve-se para poupar recursos, visto que na situação de navegação, a aplicação gasta muitos recursos computacionais devido ao reposicionamento da câmera e recálculo de matrizes. Para navegação utilizando o modelo de câmera implementado, o usuário tem o recurso de utilizar teclas: • tecla W para deslocamento para frente no eixo da câmera 69 Figura 38: VISUALIZADOR - DADOS E TABELA DE CORES FONTE: O Autor • tecla S para deslocamento para trás no eixo da câmera • tecla D para virar (Yaw) a direita • tecla A para virar (Yaw) a esquerda • tecla G para descer a câmera na vertical • tecla T para subir a câmera na vertical Figura 39: VISUALIZADOR - CONTROLES DE CÂMERA FONTE: O Autor 70 Conforme a câmera tem sua posição alterada, as suas coordenadas podem ser vistas nos atributos X, Y e Z, além do ponto em que se está olhando (ponto C). Um botão para alterar a posição permite que o usuário entre com coordenadas X, Y e Z tanto para posição da câmera, quanto para o ponto que se deseja observar. As figuras 40 e 41 mostram exemplos de como o usuário pode navegar pelo volume dos dados. Figura 40: VISUALIZADOR - EXEMPLO DE NAVEGAÇÃO FONTE: O Autor A parte inferior da tela do visualizador contém o recurso de filtro e também os dados da elevação. A figura 42 mostra os dados da elevação. Os dados informados são : • Data e hora do arquivo 17 • Elevações - número de elevações contidas nos dados informados ao visualizador • Número de raios por elevação • Número de bin por raio • Elevação ou Ângulo da Elevação em relação a horizontal 17 data e hora dos dados coletados pelo radar 71 Figura 41: VISUALIZADOR - EXEMPLO DE NAVEGAÇÃO FONTE: O Autor Além dos dados, nesta seção também está disponibilizado o recurso de filtro, pelos campos que permitem ao usuário entrar com os valores a serem filtrados. Pode-se entrar com valores em faixa. Ao acionar o botão “Aplicar Filtro”, os dados são filtrados e a imagem é atualizada. Ao acionar o botão “Remover filtro”, o filtro é removido e todo o conjunto de dados é apresentado. A figura 43 mostra mostra um exemplo de aplicação do recurso de filtro, onde foram filtrados os dados de reflectividade entre -24 a +21. Percebe-se que o recurso é útil para identificação de dados dentro do conjunto de dados. 72 Figura 42: VISUALIZADOR - RECURSO DE FILTRO DE DADOS FONTE: O Autor Figura 43: VISUALIZADOR - RECURSO DE FILTRO DE DADOS FONTE: O Autor 73 4.3 CONSIDERAÇÕES FINAIS No capı́tulo, os métodos e técnicas utilizados para o desenvolvimento da aplicação foram apresentados. O uso da linguagem de Programação Java para o desenvolvimento do leitor de dados justifica-se pela vantagem de compilação única para qualquer plataforma. Além disto, o desempenho comparado com outras linguagens já não é um fator que a distancie de outras linguagens conforme (BULL et al., 2001). Desta forma, esta linguagem é utilizada para codificação da leitura, descompactação de dados e extração dos dados em formato JSON. O criação de biblioteca com classes e funções em Javascript foi necessário dado que a aplicação será executada em ambiente de Navegador na Internet, bem como o contexto WebGL só pode ser acessado por meio do uso de Javascript. E a notação JSON utilizada também facilita em muito a transferência de dados, permitindo que objetos Javascript sejam imediatamente criados após o recebimento dos dados. O uso de técnicas de separação de responsabilidades (dados e renderização) segundo (SCHROEDER; YAMROM, 1994) e (TELEA, 2008) estabeleceu a direção para o desenvolvimento das classes dos dados de radar e da classe para renderizar estes dados. Diferentemente de outros ambientes de programação de visualização tais como OpenGL, WebGL não implementa o modelo de câmera sendo necessária programação e desenvolvimento especı́ficos. O modelo selecionado neste trabalho é o modelo LookAt, que permite ao usuário “navegar” dentro do ambiente virtual. O cálculo matricial para cálculos da perspectiva da câmera mostram-se um desafio quando da apresentação dos dados, visto que vários cálculos são necessários, porém quando tratados pelo shader de vértice, as matrizes são tratadas como constantes pelos valores uniforms para todos os vértices. Porém, todos os vértices são renderizados pelas instâncias do shader de vértices, e como apresentado, os valores do attribute aVertexPosition é passados um a um para o shader de vértice. Percebe-se também que o desenvolvimento para ambiente “web” ou seja, para navegadores da Internet é diferente do tradicional por se tratar de um ambiente distribuı́do e também heterogêneo. Associado a este desafio, a linguagem Javascript não possui compilador, sendo os erros de sintaxe descobertos apenas durante a execução. 74 5 RESULTADOS Este capı́tulo apresenta os resultados obtidos utilizando a implementação do visualizador. Por meio da visualização de várias elevações, são apresentados os dados de radar, grandeza refletividade para uma data especı́fica. Além da visualização individual, também será analisada a apresentação de dados de todos as elevações, ou seja, de um volume completo para a data e hora escolhidas. 5.1 CONJUNTO DE DADOS Para testes com o visualizador, foi selecionada uma data que contivesse grande quan- tidade de chuva para permitir que as células de chuvas convectivas fossem visualizadas, bem como grandes variações na escala de refletividade Z fossem observadas (valores altos e baixos). A data selecionada foi 01/04/2011, horário 19h50 (7:50PM) em horário GMT 1 . Nesta data e horário houve chuvas de alta intensidade, incluindo granizo em boa parte do estado do Paraná e também em Curitiba 45. A figura 45 foi obtida em 01/04/2011, por volta das 16h30, horário de Curitiba, que corresponde a 7:30PM GMT. A foto mostra a intensidade do granizo que caiu sobre a cidade de Curitiba nessa data. O jornal local Gazeta do Povo (TRISOTTO; GERON; ANIBAL, 2011), em sua edição do dia 02/04/2011, publicou matéria sobre o evento que trouxe grande transtorno para a cidade, causando problemas ao trânsito e deixando 28 bairros sem energia elétrica devido aos problemas causados pelo vento intenso e pelas descargas elétricas. 5.1.1 Preparação para testes Os dados coletados pelo radar ficam armazenados em sistema de arquivos do próprio radar, em formato proprietário, como já explicado na seção 4.2.1. 1 GMT Greenwich Mean Time - horário do meridiano de Greenwich. Em dados meteorológicos são muitas vezes obtidos segundo o horário GMT para não haver problemas com fusos horários 75 Figura 44: CHUVA INTENSA FONTE: O Autor O arquivo do radar contém dados de 13 varreduras com os seguintes ângulos de elevação: 0, 5◦ , 1, 0◦ , 1, 5◦ , 2, 0◦ , 3, 0◦ , 4.0◦ , 5, 0◦ , 6, 5◦ , 8, 0◦ , 10, 0◦ , 12, 0◦ , 15, 0◦ , 18, 0◦ e 21, 0◦ . Utilizando-se o leitor de dados de radar, foram gerados arquivos individuais para cada elevação, totalizando quatorze arquivos para cada uma das elevações e também um arquivo contendo todas as quatorze elevações, que compõem o volume completo de dados obtidos ou lidos pelo radar meteorológico. Para que o visualizador pudesse mostrar os dados, para cada arquivo de dados, a linha de inclusão do arquivo era alterada 2 . Então a linha de número 17 era alterada conforme : <script src="./js/dados_sweep_0.txt"> </script> onde o texto sweep 0.txt deve ser trocado para cada arquivo de dados. Além disso, o servidor foi iniciado como parte do ambiente necessário para execução do visualizador. c modelo Todos os testes foram realizados em computador Notebook marca Lenovo , 2 Nesta versão não foi adotada nenhuma forma de troca de arquivos ou leitura de dados de forma automática e dinâmica, pois a principal observação da aplicação é desempenho para renderização dos dados 76 Figura 45: FOTOGRAFIA DO JORNAL GAZETA DO POVO FONTE: (TRISOTTO; GERON; ANIBAL, 2011) G460, com 4G Bytes de memória RAM, disco rı́gido de 500 G Bytes e placa de vı́deo NVIDIA c c GForce 310M com 512 Mbytes de memória dedicada ao processamento de vı́deo. O sistema operacional c c Linux Ubuntu versão 10.10 64 bits. O driver de vı́deo especı́fico fornecido pela NVIDIA, versão 295.59. Servidor Tomcat 3 versão 7.0. A versão do JDK utilizada para compilar o leitor de dados de radar e para executar o servidor Tomcat é 1.7.0 05-b05. O navegador utilizado foi c Chrome c versão Versão 21.0.1180.89. o Google 5.1.2 Resultados 5.1.3 Tabela de Cores Sendo a Refletividade uma grandeza escalar, adota-se tabela de cores para representação dos dados (TELEA, 2008, p.52). A figura 46 apresenta esta tabela de cores e a faixa valores de dBZ correspondente a cada cor. 3 Servidor de código aberto para tecnologia Java Servlets e Java Server Pages. Disponı́vel em tomcat.apache.org 77 Figura 46: TABELA DE CORES APLICADA NOS RESULTADOS FONTE: O Autor Elevação de 0, 5◦ A figura 47 mostra a visualização dos dados relativos à elevação de 0, 5◦ . Ativando a navegação (por meio da caixa de checagem “Permite Navegação” 4.2.7) pode-se navegar pelos dados, conforme mostram as figuras 48, 49 e 50. Ativando o botão “Visão Satélite” e habilitando a navegação dos dados (marcando a caixa de checagem “Permite navegação”), quando navegando diretamente para baixo, observouse em alguns momentos uma pequena interrupção na apresentação dos dados. Não foi possı́vel determinar com exatidão o tempo da interrupção. As figuras 51 e 52 mostram a visualização a partir do acionamento do botão “Visão Satelite” e movendo a câmera. A visualização por meio da “Visão de Satélite” permite comparação com o software em uso atualmente pelo Simepar para visualização dos dados de radar meteorológico, que é ferramenta de visualização que apresenta os dados de maneira planar ou bidimensional. A figura 53 mostra como os dados são representados em software em uso, podendo ser comparado com a figura 54, que foi produzida pela ferramenta de Visualização Tridimensional desenvolvida neste 78 Figura 47: ELEVAÇÃO 0, 5◦ FONTE: O Autor Figura 48: ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO FONTE: O Autor trabalho. Elevação de 1, 0◦ A figura 55 mostra a visualização dos dados imediatamente ao carregar o visualizador. 79 Figura 49: ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO FONTE: O Autor Figura 50: ELEVAÇÃO 0, 5◦ - NAVEGAÇÃO FONTE: O Autor Da mesma forma que na execução anterior, foi ativada a navegação marcando a caixa de checagem “Permite navegação” (ver figura 37). As figuras 55, 56 mostram a visualização através de navegação com a teclas. 80 Figura 51: ELEVAÇÃO 0, 5◦ - VISTA DE CIMA FONTE: O Autor Figura 52: ELEVAÇÃO 0, 5◦ - VISTA DE CIMA FONTE: O Autor Elevação de 1, 5◦ A figura 58 mostra a visualização destes dados ao carregar o visualizador. Da mesma forma que na execução anterior, foi ativada a navegação marcando a caixa de checagem “Permite Navegação” 4.2.7. A figura 59 mostra visualização com navegação nesta 81 Figura 53: ELEVAÇÃO 0, 5◦ - SOFTWARE DE VISUALIZAÇÃO DO SIMEPAR FONTE: Simepar, adaptado pelo autor Figura 54: ELEVAÇÃO 0, 5◦ - VISUALIZAÇÃO DE SATÉLITE FONTE: O Autor elevação. 82 Figura 55: ELEVAÇÃO 1, 0◦ FONTE: O Autor Figura 56: ELEVAÇÃO 1, 0◦ - NAVEGAÇÃO FONTE: O Autor Elevação de 2, 0◦ A figura 60 mostra a visualização destes dados ao carregar o visualizador. Ativando a navegação marcando a caixa de checagem “Permite Navegação” 4.2.7, tem-se a demonstração da navegação na figura 61. 83 Figura 57: ELEVAÇÃO 1, 0◦ - NAVEGAÇÃO FONTE: O Autor Figura 58: ELEVAÇÃO 1, 5◦ FONTE: O Autor Elevação de 3, 0◦ A figura 62 mostra a visualização destes dados ao carregar o visualizador. 84 Figura 59: ELEVAÇÃO 1, 5◦ - NAVEGAÇÃO FONTE: O Autor Figura 60: ELEVAÇÃO 2, 0◦ FONTE: O Autor Elevação de 4, 0◦ A figura 63 mostra a visualização destes dados ao carregar o visualizador. Ativando a navegação marcando a caixa de checagem “Permite Navegação” 4.2.7, pode-se navegar pelo ambiente. Posicionando a câmera bem baixo e tendo uma visão lateral, conforme demonstra a 85 Figura 61: ELEVAÇÃO 2, 0◦ - NAVEGAÇÃO FONTE: O Autor Figura 62: ELEVAÇÃO 3, 0◦ FONTE: O Autor figura 64, pode-se perceber a forma de cone devido a elevação com ângulo de 4, 0◦ . Conforme o funcionamento do radar explicado em 2.1, as varreduras são em forma cônica, sendo percebida pelo posicionamento adequado da câmera. 86 Figura 63: ELEVAÇÃO 4, 0◦ FONTE: O Autor Figura 64: ELEVAÇÃO 4, 0◦ - VISÃO LATERAL FONTE: O Autor Elevação de 5, 0◦ A figura 65 mostra a visualização destes dados ao carregar o visualizador. Ativando a navegação, pode-se navegar pelo ambiente. Habilitando a navegação e também aplicando-se filtro para valores entre -24 e 0. Isto é demonstrado pela figura 66. 87 Figura 65: ELEVAÇÃO 5, 0◦ FONTE: O Autor Figura 66: ELEVAÇÃO 5, 0◦ - NAVEGAÇÃO COM FILTRO APLICADO FONTE: O Autor Elevação de 6, 5◦ A figura 67 mostra a visualização destes dados ao carregar o visualizador. Ativando a navegação, pode-se navegar pelo ambiente e a figura 68 mostra a formação do cone. 88 Figura 67: ELEVAÇÃO 6, 5◦ FONTE: O Autor Figura 68: ELEVAÇÃO 6, 5◦ - VISÃO LATERAL FONTE: O Autor Elevação de 8, 0◦ A figura 69 mostra a visualização destes dados ao carregar o visualizador. 89 Figura 69: ELEVAÇÃO 8, 0◦ FONTE: O Autor Figura 70: ELEVAÇÃO 10, 0◦ FONTE: O Autor Elevação de 10, 0◦ A figura 70 mostra a visualização destes dados ao carregar o visualizador. 90 Figura 71: ELEVAÇÃO 12, 0◦ FONTE: O Autor Elevação de 12, 0◦ A figura 71 mostra a visualização destes dados ao carregar o visualizador. Elevação de 15, 0◦ Figura 72: ELEVAÇÃO 15, 0◦ FONTE: O Autor 91 A figura 72 mostra a visualização destes dados ao carregar o visualizador. Elevação de 18, 0◦ Figura 73: ELEVAÇÃO 18, 0◦ FONTE: O Autor A figura 73 mostra a visualização destes dados ao carregar o visualizador. Elevação de 21, 0◦ A figura 74 mostra a visualização destes dados ao carregar o visualizador. Percebe-se claramente que a elevação cria um cone muito estreito Todas as elevações A visualização de todas as elevações constituem-se no volume de dados do radar. Este volume foi extraı́do e inserido no arquivo sweep dados 14 sweeps completo.txt. A figura 75 mostra a visualização do dados. O conjunto de dados é muito maior que os testados anteriormente, contendo 24,8 M bytes (26.024.929 bytes). Porém, quando se habilita a navegação, percebeu-se que há a ocorrência de atrasos quando se deseja navegar. Como todas as elevações estão sendo apresentadas, há sobreposição e dependendo da posição da câmera não é possı́vel visualizar alguns valores. Dado isto, o importante é o uso da 92 Figura 74: ELEVAÇÃO 21, 0◦ FONTE: O Autor Figura 75: TODAS ELEVAÇÕES FONTE: O Autor ferramenta de filtros para remover valores que não se desejam visualizar. A figura 76 mostra a aplicação de filtro, removendo os valores da faixa de -24 a 0 dbZ, ou seja, são mostrados valores 93 de refletividade acima de 0 dbZ. Figura 76: VISUALIZAÇÃO COM DADOS ACIMA DE 0 DBZ FONTE: O Autor Mesmo com a aplicação do filtro, ainda tem-se muitos valores que encobrem outros valores. Isto se deve porque valores de chuvas de baixa intensidade aparecem na parte superior. Aplicando-se o filtro novamente, agora removendo valores -24 a 21 dbZ (ou seja, mostrando valores acima de 21 dbZ) e -24 a 30 dbZ (ou seja, mostrando valores acima de 30 dbZ), eliminase boa parte dos valores baixos de refletividade. As figuras 77 e 78 mostram o efeito do filtro sobre os dados e sua apresentação no visualizador. Com a aplicação do filtro, é possı́vel perceber as células de chuva mais intensa e que são mais concentradas, conforme explica a teoria para este tipo de chuva conforme (DUTTON, 1995). Além disso, percebe-se que, com a diminuição de dados a serem apresentados, a velocidade para navegação melhorou muito, proporcionando quase sem nenhum atraso. Percebe-se pelo uso da ferramenta de monitoração do sistema 4 , percebe-se claramente em alguns momentos uso intenso da CPU, alcançando valores de até 100%. Entende-se que isso se deve ao fato de que a linguagem de programação e de execução é o Javascript, sendo executado pelo interpretador embutido no próprio navegador. 4 No Ubuntu Linux, esta ferramenta chama-se Monitor do Sistema. No Sistema Operacional Windows, a ferramenta chama-se Gerenciador de Tarefas. 94 Figura 77: VISUALIZAÇÃO COM DADOS ACIMA DE 21 DBZ FONTE: O Autor As figuras 79, 80 e 81 mostram a navegação nos dados, pelo movimento de câmera, permitindo perceber com mais clareza o fenômeno. 95 Figura 78: VISUALIZAÇÃO COM DADOS ACIMA DE 30 DBZ FONTE: O Autor Figura 79: NAVEGAÇÃO APÓS FILTRO FONTE: O Autor 96 Figura 80: NAVEGAÇÃO APÓS FILTRO FONTE: O Autor Figura 81: NAVEGAÇÃO APÓS FILTRO FONTE: O Autor 97 6 CONCLUSÕES Pretendeu-se durante este trabalho, elaborar um protótipo de ferramental que permitisse a visualização tridimensional dos dados de radar meteorológico, de modo que o profissional pudesse ter acesso a visualização do fenômeno meteorológico como um todo, provendo acesso via navegador de internet a esse ferramental, porém em tempo hábil para apresentação desses dados. A navegação dentro do ambiente de visualização permitiu a observação de detalhes, como o percebido pelo sr. Reinaldo Silveira em seu depoimento. Esta melhoria na percepção do fenômeno e na forma de observação e compreensão quando comparadas com a visualização bidimensional faz parte dos objetivos especı́ficos desse trabalho. É possı́vel observar que conforme as elevações vão sendo de ângulos maiores, percebese a formação do “cone” devido a varredura do radar, conforme explicado em 2.1. Além disto, do ponto de vista de análise do fenômeno meteorológico, é possı́vel perceber que a intensidade da chuva, informada pela da refletividade Z varia conforme a altitude. Isto é importante para se conhecer a chuva na base e no topo da nuvem ou célula convectiva. Isto é observado na 47 comparando com a figura 74, onde as chuvas de maior refletividade são vistas em menor quantidade, predominando os valores para chuvas de intensidade baixa, entre -24 a 18 dbZ. Na observação de todas as elevações simultaneamente, é possı́vel observar o fenômeno fı́sico, permitindo clareza na identificação do fenômeno. Atualmente a ferramenta bidimensional cumpre seu papel no auxı́lio ao profissional meteorologista nas estimativas e determinações necessárias para as previsões de nowcast. Além disto, o meteorologista é treinado durante sua formação a utilizar ferramentas bidimensionais. Porém, a visualização tridimensional permite observar o fenômeno como um todo e não em “fatias” como é feito com a ferramente bidimensional. O cerébro do profissional é que deve “montar” as fatias para que esse perceba o fenômeno total. Isto posto, entende-se que o visualizador aqui apresentado tem tremendo potencial para auxı́lio no uso na previsão e compreensão dos fenômenos, principalmente os fenômenos severos (chuvas intensas e tempestades). Revisando os objetivos do trabalho conforme listados na seção 1.1 da Introdução, tem- 98 se: O objetivo geral do trabalho é desenvolver uma ferramenta de visualização de dados 3D. Ainda como objetivos especı́ficos, tem-se: Desenvolver protótipo de ferramenta de visualização de Dados de radar meteorológico em 3 Dimensões (3D), porém com capacidade para apresentação dos dados em tempo hábil de modo que possa ser utilizado em ambiente operacional de análise de eventos meteorológicos; Esta ferramenta deverá ser capaz de visualizar os dados por meio da Internet e dentro do navegador (browser), sem nenhuma instalação de softwares adicionais; A ferramenta em visualização tridimensional foi elaborada. O objetivo especı́fico que trata que a ferramenta deve apresentar os dados em tempo hábil refere-se ao fato de que algumas ferramentas implementadas não apresentavam desempenho suficiente para uso em ambiente operacional, demorando no processo de renderização. Baseando-se no primeiro objetivo especı́fico, todo o desenvolvimento foi pautado em apresentar desempenho. Devido ao fato de que a codificação da aplicação ser utilizando Javascript, preocupou-se em utilizar técnicas que minimizassem o impacto no desempenho. Para tanto, escolheu-se a apresentação da “nuvem de pontos” no desenvolvimento da grade, bem como utilizando célula contendo apenas o valor do bin do dado do radar. Apesar disto, um volume de dados de radar tem 4.032.000 valores (bins), que precisam ser renderizados. Com a aplicação dos filtros dos dados, permite-se que a renderização seja mais eficaz, a partir da construção de um novo dataset a partir da filtragem dos valores no dataset original. Procurouse ainda, não utilizar técnicas de iluminação que pudessem melhorar o aspecto estético da visualização, mas que implicam em custo computacional adicional, dado os cálculos necessários. O visualizador aqui apresentado trabalhou adequadamente quando foi exigido para apresentar o volume de dados, ou seja, todas as elevações simultaneamente. A navegação dos dados apresentou alguns atrasos, porém pode-se atribuir a baixa capacidade de processamento da placa gráfica do equipamento utilizado para testes. Percebeu-se que quando todas as elevações (volume de dados) era apresentado, e habilitava-se a navegação no ambiente, o problema da interrupção fazia-se percebido, havendo pausas de mais de três segundos. Ao aplicar o filtro de dados, como efetuado e visto nas figuras 76, 77 e 78 esse problema era minimizado e até não sendo percebido durante a navegação. Outrossim, cabe lembrar que esse excesso de uso de CPU apenas ocorre quando a navegação está habilitada, ou seja, quando a aplicação está pronta para interatividade com o usuário. 99 A navegabilidade implica na construção de modelo de câmera que permita ao usuário “navegar” dentro do volume. Como WebGL não implementa o modelo de câmera, a implementação desenvolvida foi efetuada utilizando Javascript, com a construção de classes, com manipulação de matrizes para tal, conforme apresentado no Pipeline do Visualizador 4.2.3. Como se trata de ponto que poderia gerar algum tipo de comprometimento no desempenho computacional, optou-se por desenvolvimento simples e direto, mesmo com o uso de matrizes. Observa-se, como citado no capı́tulo 4, que existem outras técnicas, mas que não possam ser aplicadas para desenvolvimento de aplicações voltadas a ambientes operacionais, bem como não se prestam a previsão denominada “nowcast” devido à velocidade de geração das imagens. O WebGL permite que aplicações de visualização de dados sejam construı́das voltadas para a Internet. Isto mostrou-se claro, onde utilizando apenas Javascript, foi possı́vel executar a aplicação de visualização de dados do radar meteorológico sem necessidade de plugins. Esta tecnologia pode então ser usada para aplicações de visualização, permitindo acesso a dados rec máquina virtuais motamente sem a instalação de outros recursos, tais como plugins, applets, ou similares. O desenvolvimento de aplicação voltada para a Internet permite a escolha da forma em que os dados e imagens serão manipuladas, pois as aplicações são, em termos gerais, separadas em duas camadas: servidor e cliente. A camada servidor é o repositório dos dados, normalmente identificado pelo site ou portal acessado. A camada cliente é o conjunto de dados e de informações para apresentação desses dados no navegador utilizado pelo usuário. A aplicação desenvolvida em WebGL permite que todo o tratamento de dados seja feito na camada cliente sem necessidade de reconexões com o servidor, necessitando apenas quando se deseja novos dados ou informações adicionais. Quanto à Visualização Cientı́fica, por se tratar de tecnologia nova, ainda há pouco desenvolvimento de trabalhos, conforme descrito em 3.3. Percebe-se que esta tecnologia pode ainda ser empregada para novas e melhores aplicações de visualização, principalmente ao fato de que WebGL é voltado para a Internet, não carecendo de nenhum tipo de instalação. Ou seja, aplicações que hoje necessitam de instalação e configurações, nesse ambiente apenas requerem um navegador que suporte WebGL e a conexão com a Internet. Diferente de versões de programas compilados para uma plataforma especı́fica, onde há necessidade manter versões para cada plataforma, aplicações desenvolvidas para a Internet necessitam de apenas uma única versão de aplicação. Apesar do uso de Javascript como sendo um fator que possa impactar no desempenho, pois a linguagem é interpretada em tempo de execução, o advento de novos computadores 100 disponı́veis aos usuários diminuem esse problema. Outro fator de impacto para a adoção da tecnologia pode ser o uso da Internet como repositório dos dados, fator este que tem seu impacto em acesso a Internet por meio de redes com velocidade de transmissão baixas ou com dificuldades de conexão. As novas tecnologias de redes permitem que o acesso aos dados sejam melhorados, visto que se percebem melhorias na infraestrutura. Além disto, a tecnologia pode ser usada mesmo para usuários dentro de uma rede privada (rede de uma empresa, universidade ou instituto de pesquisa), não necessariamente a Internet aberta. Estes tipos de redes, usualmente possuem mecanismos de proteção, tais como firewalls, que impedem a instalação de programas e acesso de dados remotos sem que conexões sejam autorizadas. O fato de não necessitar de instalações de programas, permite-se que usuários possam acessar os recursos de visualização. Entende-se portanto real potencial para construção de aplicações de Visualização Cientı́fica e também de Computação Gráfica que façam uso de WebGL como plataforma gráfica. O potencial crescimento da Internet, inclusive em aparelhos móveis, permite que esta tecnologia tenha franca expansão. 6.1 SUGESTÕES PARA TRABALHOS FUTUROS Visando à continuidade do trabalho, propõem-se melhorias e sugestões tanto do ponto de vista acadêmico quanto para melhorar a experiência visual sob o aspecto estético e incremento nos recursos de visualização dos dados. • Implementação de carga dinâmica dos dados - como os dados já estão em formato JSON a implementação de técnicas para carga dos dados dinamicamente está muito facilitada. O uso de AJAX pode facilitar o uso em ambiente operacional. Inclusive como sugerido pelo sr. Leonardo, podendo até aplicar filtros diretamente nos dados, visto não haver interesse em valores abaixo de 0 dbZ. • Escalas de distâncias - Inserção de escala de distâncias para facilitar localização, principalmente quanto à altitude dos elementos. • Interpolação - A técnica proposta neste trabalho foi o de uso de células formadas por pontos. Como a quantidade de pontos para todo o volume é 4.032.000, tem-se uma “nuvem de pontos” que permite uma boa visualização dos dados. Porém, ao aproximar-se dos dados com a navegação, percebem-se intervalos que devem ser preenchidos com a interpolação de dados. Uma proposta pode ser o uso de Radial Basis Functions (RBF) 101 conforme (LEWIS; PIGHIN; ANJYO, 2010), que poderiam ser aplicados aos vértices e desta forma permitir a interpolação. Um estudo foi iniciado, visando a aplicação no desenvolvimento do trabalho, mas não concluı́do. O método proposto para interpolação dos dados compunha-se de, definir “células de avaliação”, onde a composição de oito bins entre dois raios e duas elevações consecutivas, formando um volume, calcular as RBF para cada um dos bins e efetuar a interpolação para cada um dos “bins virtuais” ou “fictı́cios” criados e efetuar a interpolação. O procedimento para calcular esses bins é exaustivo, bem como o volume de dados gerados seria muito grande, dada a quantidade de novos pontos (bins) criados. Porém, devido a exigüidade do tempo, foi necessário decidir-se pela implementação apenas do visualizador, sem a interpolação dos dados. • Cálculo de altitudes para permitir a identificação de altitudes de base de nuvem e topo de nuvem; • Identificação dos pontos - cada valor precisa ser identificado por sua latitude e longitude. Isto permitiria o georreferenciamento dos dados. • Criação de superfı́cies - A criação de superfı́cies unindo os dados permitiria uma suavização na visualização do volume, melhorando a visualização do ponto de vista estético. • Visualização Volumétrica - Aplicando técnicas de Visualização Volumétrica, incluindo transparência melhorariam a experiência visual, porém com aumento do consumo de recursos computacionais. • Animação ou recurso para carga de várias leituras dos dados do radar, permitindo observar a evolução dos fenômenos no tempo. 102 Glossário σs Área de seção transversal ou scattering cross section é a área geométrica hipotética que descreve a probabilidade da luz ou outra radiação eletromagnética ser espalhada por uma partı́cula. 8, 9 AJAX Acrônico para Asynchronous JavaScript and XML - Javascript e XML assı́ncrono. Técnica utilizada na Internet para carga de dados e de código HTML de forma assı́ncrona, ou seja, sem necessidade da recarga de toda a página que está solicitando os dados. Desta forma, permite carga dinâmica de dados, facilitando a implementação de aplicações dinâmicas e modernas.. 101 applet Aplicativo escrito em Java que pode ser executado dentro de uma página HTML por meio da máquina virtual (JVM).. 20 bin Elemento discreto ao longo de um raio radial onde os dados são coletados. 11, 12, 31 byte code Código gerado a partir da compilação de código fonte escrito em linguagem Java. Este código é lido pela Máquina Virtual Java (ver JVM) e então executado pelo computador. Diferente de outros compiladores tais como compilador C, o compilador Java não cria código executável para um sistema operacional especı́fico, mas cria byte code, que é executado por sua máquina virtual (JVM). 20 c 16 Chrome Navegador desenvolvido pela Google . c 16 Firefox Navegador desenvolvido pela Mozilla . GPU Graphics Process Unit ou Unidade de Processamento Gráfico. É o nome para a placa gráfica disponı́vel no computador pessoal, porém tendo capacidade para manipulação de primitivas gráficas. Usualmente tem suporte as principais bibliotecas gráficas tais como OpenGL e DirectX. 22, 31 hardware Representa a parte fı́sica de computadores: placas gráficas, placas de rede, discos para armazenamento, etc. 18 103 Internet Rede Mundial de Computadores, utilizada por todo mundo para disseminação de informação, pesquisa cientı́fica, entretenimento, comunicação. 19 JDK Java Developers Kit. Conjunto de programas e utilitários que permitem a compilação e execução de programas escritos com linguagem Java. Também é utilizado por Servidores de tecnologia JSP que necessitam compilar e executar código Java. Exemplo de servidor é o Apache Tomcat.. 76 JVM Java Virtual Machine ou Máquina Virtual Java: ambiente que interpreta a código compilado Java (Java Byte Code) e o executa. Permite que um código Java seja compilado apenas uma vez, mas executado em várias plataformas, bastando apenas que a máquina virtual esteja instalada e execute o código compilado em Java ByteCode.. 20 navegador Programa (software) que permite o acesso a páginas na Internet. São exemplos de c Mozilla Firefox , c Google Chrome , c Safari , c navegadores o InternetExplorer , entre outros.. 16, 19, 20, 28, 32, 35, 37, 56, 73, 76, 93, 100 Nowcast Previsão de curto espaço de tempo normalmente de 0 a 6 horas. 2 OpenGL Conjunto de instruções (api)para programação gráfica para 2D e 3D, desenvolvida pelo KhronosGroup. 17–20 OpenGL ES Conjunto de instruções (api) para programação gráfica para 2D e 3D para sistemas embarcados, tais como consoles, telefones celulares, dispositivos de veı́culos. Constituida por um sub conjunto das instruções disponibilizadas em OpenGL. Desenvolvido e mantido pelo KhronosGroup. 16, 18, 19 OpenGL ES SL Shading Language (a tradução literal é “linguagem de sombreamento”) para o ambiente com menor capacidade de processamento e memória, tais como celulares e tablets. 16, 22, 25 OpenGL SL OpenGL Shading Language ou Linguagem de Shaders OpenGL - a tradução literal é “linguagem de sombreamento”. Conjunto de instruções de alto nı́vel para programação dos Shaders de Vértices e Shaders de Fragmento. 18 pipeline Diagrama contendo sequência de unidades funcionais que executam uma tarefa em vários estágios. Cada estágio obtém dados de entrada e produz um resultado. Este resultado é então, utilizado como dado de entrada para o próximo estágio. Também pode ser expresso com Diagrama em Blocos. 18, 32 104 plugin Programa que permite ser embutido em outro, adicionando funcionalidades a este último. 16, 19, 20 radar Radar é um acrônimo em inglês para “Radio Detection and Ranging”; tradução literal “Detecção e estimativa de distância por rádio”, é equipamento que transmite ondas eletromagnéticas e capta parte do sinal refletido ou ecoado por obstáculos. Com este eco, pode detectar obstáculos, bem como estimar a posição e distância a partir do transmissor . 1–4, 6, 11–13 render O verbo “to render” do idioma inglês significa literalmente “manter alguém em um estado particular”. Na Computação Gráfica, significa apresentar imagens em um monitor de vı́deo ou outro dispositivo de saı́da, de modo que os elementos gráficos sejam representados (RENDER, ). Em português, o verbo é adaptado e usa-se o termo renderizar. 31, 32, 105 renderizar Renderizar é o uso do verbo “render” - ver render. 28, 30 renderização Uso do verbo render na lı́ngua portuguesa, para explicar o sentido de apresentação de imagem em dispositivo de saı́da - ver render. 19, 31, 65–67, 73, 99 c 16 Safari Navegador desenvolvido pela Apple . shader a tradução literal é “sombreador”; Pequena porção de código para programação da placa gráfica ou GPU, substituindo alguma funcionalidade fixa provida pela biblioteca gráfica, permitindo que o desenvolvedor tenha maior controle e flexibilidade sobre a criação na renderização dos elementos primitivos. O termo foi cunhado pela empresa c atualmente é utilizado pelas principais bibliotecas de computação gráfica: OpenGl Pixare e Direct3D (SHADER, ). 16, 18, 23, 65 tronco de visão Tronco de pirâmide formado pela porção da pirâmide de visão delimitada pelos plano anterior e posterior (Bruno Eduardo Madeira, 2006, p.21). Também é denominado na literatura com Viewing Frustum. 23 Volume de Visão Volume formado pela porção da pirâmide de visão delimitada pelos plano anterior e posterior (FOLEY et al., 1990, p.241). Recebe também o nome de Pirâmide Visão ou Tronco de Visão. 23 WEB Relativo ou relacionado com a Internet. Literalmente, significa “teia de aranha”. 16 105 Referências Bibliográficas ALONSO, M.; FINN, E. Fı́sica um curso universitário. São Paulo Brasil: Edit. Edgard Blucher, 1972. ANTTONEN, M. et al. Transforming the web into a real application platform: new technologies, emerging trends and missing pieces. In: Proceedings of the 2011 ACM Symposium on Applied Computing. New York, NY, USA: ACM, 2011. (SAC ’11), p. 800–807. ISBN 978-1-4503-0113-8. Disponı́vel em: <http://doi.acm.org.ez22.periodicos.capes.gov.br/10.1145/1982185.1982357>. ANYURU, A. Professional WebGL Programming: Developing 3D Graphics for the Web. USA: Wrox, 2012. Disponı́vel em: <http://media.wiley.com/product data/excerpt/60/11199688/1119968860-94.pdf>. BLYTHE, D. OpenGL ES Common Profile Specification. 2002. Disponı́vel em: <http://www.khronos.org/registry/gles/specs/1.0/opengles spec 1 0.pdf>. Acesso em: 12 apr 2012. Bruno Eduardo Madeira. Calibração Robusta de Vı́deo Para Realidade Aumentada. Dissertação (Mestrado) — Instituto Nacional de Matemática Pura e Aplicada, Rio de Janeiro, 18 dez. 2006. BULL, J. M. et al. Benchmarking java against c and fortran for scientific applications. In: Proceedings of the 2001 joint ACM-ISCOPE conference on Java Grande. New York, NY, USA: ACM, 2001. (JGI 0́1), p. 97–105. ISBN 1-58113-359-6. Disponı́vel em: <http://doi.acm.org/10.1145/376656.376823>. BUNDERI, R. The Invention That Changed the World: How a Small Group of Radar Pioneers Won the Second World War and Launched a Technological Revolution. 1230 Avenue of the Americas, New York, New York: Touchstone Books, 1997. CANTOR, D.; JONES, B. WebGL Beginner’s Guide. Livery Place 35 Livery Street Birmingham B3 2PB, UK: Packt Publishing, 2012. CAPES. Site de Periódicos. 2012. Disponı́vel em: <http://periodicos.capes.gov.br>. Acesso em: 10 mar. 2012. CASTELLANO, M. S.; NUNES, L. H. Avaliação espacio-temporal das precipitações extremas e seus impactos no meio urbano: um caso brasileiro. Territorium Revista Portuguesa de Riscos, Prevenção e Segurança, Universidade de Coimbra, v. 17, p. 35–44, 2010. Disponı́vel em: <http://www.uc.pt/fluc/nicif/riscos/Documentacao/Territorium/T17 artg/05Territorium 35-44.pdf>. CESAR JR, R. M. Reconstrução Tridimensional por Ajuste de Superfı́cies Paramétricas. Dissertação (Mestrado) — Universidade Estadual de Campinas, 1994. 106 CROCKFORD, D.; IETF. The application/json Media Type for JavaScript Object Notation (JSON). 2006. RFC 4627. Disponı́vel em: <http://www.ietf.org/rfc/rfc4627.txt?number=4627>. Acesso em: 08 Mai. 2012. DOGGETT IV, A. L. et al. 3D Visualization of Weather Radar Data. In: AMS. [S.l.]: AMS, 2002. 21st Conf. on Severe Local Storms. DUTTON, J. A. Dynamics of Atmospheric Motion. New York USA: Dover Publications Inc, 1995. ECMA. ECMAScript Language Specification 262. 2011. Disponı́vel em: <http://www.ecma-international.org/publications/standards/Ecma-262.htm>. Acesso em: 07 Mai. 2012. ERNVIK, A. 3D Visualization of Weather Radar Data. Dissertação (Mestrado) — Linköping University, 2002. FOLEY, J. D. et al. Computer Graphics Principles and Practice. 2nd ed. ed. [S.l.]: Addison Wesley Publishing Company, 1990. ISBN 020112110-7. FOLHA DE SÃO PAULO. Número de mortos na região serrana do rio passa de 900. Folha de São Paulo, 16 fev. 2011. Cotidiano. Disponı́vel em: <http://www1.folha.uol.com.br/cotidiano/876441-numero-de-mortos-na-regiao-serrana-do-rio-passa-de-900.shtml>. Acesso em: 12 abr. 2011. FOLHAPRESS. Inundações afetam mais de 200 mil pessoas na austrália. Gazeta do Povo, 4 jan. 2011. Clima. GOMES, J.; VELHO, L. Fundamentos da Computação Gráfica. Rio de Janero: IMPA, 2008. ISBN 978-85-244-0200-5. GRACIA JAVIER ; BAYO, E. An Integrated 3D Web Application for Structural Analysis Software as a Service. American Society of Civil Engineers, p. 30, abr. 2012. ISSN 1943-5487. Disponı́vel em: <http://dx.doi.org.ez22.periodicos.capes% -.gov.br/10.1061/(ASCE)CP.19435487.0000217>. Acesso em: 16 apr 2012. HILL JR, F. S. Computer Graphics: using OpenGL. 2nd. ed. Upper Saddle River, N.J.: Prentice Hall, 2001. ISBN 0023548568. HO, S. Homogeneous Coordinates. 2012. Http://www.songho.ca/math/homogeneous/homogeneous.html. Disponı́vel em: <http://www.songho.ca/math/homogeneous/homogeneous.html>. Acesso em: 08 Ago 2012. HO, S. OpenGL Transformation. 2012. Http://www.songho.ca/opengl/gl projectionmatrix.html. Disponı́vel em: <http://www.songho.ca/opengl/gl projectionmatrix.html>. Acesso em: 08 Ago 2012. IEEE. Albert H. Taylor. 2012. Disponı́vel em: <http://www.ieeeghn.org/wiki/index.php/Albert H. Tayl>. Acesso em: 15 jul. 2011. INMETRO. Velocidade da Luz. 2012. Disponı́vel em: <http://www.inmetro.gov.br/infotec/publicacoes/Si.pdf>. Acesso em: 07 fev. 2012. 107 INTRODUCING JSON. 2012. Disponı́vel em: <http://www.json.org>. Acesso em: 07 Mai. 2012. KhronosGroup Inc. Webgl specification. 2011. 12 p. Disponı́vel em: <https://www.khronos.org/registry/webgl/specs/1.0>. Acesso em: 10 mar. 2011. KhronosGroup Inc. History of OpenGL. 2012. Disponı́vel em: <http://www.opengl.org/wiki/History>. Acesso em: 11 feb 2012. KNOX, K. J. Light-Induced Processes in Optically-Tweezed Aerosol Droplets. Berlin: Springer, 2011. (Springer Theses). ISBN 9783642163470. KRAUSE, U. M. M. abr. 2000. Disponı́vel em: <http://www.airpower.maxwell.af.mil/airchronicles/bookrev/buderi.html>. LANDEMAN, R. W. Computer Graphics: 3D Camera Control. 2008. Class slides for CS-543 Course Computer Graphics. Disponı́vel em: <http://web.cs.wpi.edu/˜gogo/courses/cs543/slides/cs543 12 Camera.pdf>. Acesso em: 28 Aug. 2012. LENGYEL, E. Mathematics for 3d game programming and computer graphics. Charles River Media INC, Hingham Massachusets USA, 2004. Disponı́vel em: <http://books.google.com.br/books?id=bfcLeqRUsm8C>. Acesso em: 01 Ago 2012. LEWIS, J. P.; PIGHIN, F.; ANJYO, K. Scattered data interpolation and approximation for computer graphics. In: ACM SIGGRAPH ASIA 2010 Courses. New York, NY, USA: ACM, 2010. (SA ’10), p. 2:1–2:73. ISBN 978-1-4503-0527-3. Disponı́vel em: <http://doi.acm.org/10.1145/1900520.1900522>. Acesso em: 29 Oct 2011. MCCARTNEY, E. J. Optics of the Atmosphere. United States: John Wiley & Sons, 1976. METEOPT. Www.meteopt.com. Disponı́vel em: <http://www.meteopt.com>. Acesso em: 25 fev. 2012. MUNSHI, A.; GINSBURG, D.; SHREINER, D. OpenGL ES 2.0. Boston, MA USA: Addison-Wesley, 2009. ISBN 978-0-321-50279-7. NAMI, M. R. A comparison of object-oriented languages in software engineering. SIGSOFT Softw. Eng. Notes, ACM, New York, NY, USA, v. 33, n. 4, p. 6:1–6:5, jul. 2008. ISSN 0163-5948. Disponı́vel em: <http://doi.acm.org.ez22.periodicos.capes.gov.br/10.1145/1384139.1384145>. NERY, J. T. Dinâmica climática da região sul do brasil. Revista Brasileira de Climatologia, v. 1, n. 1, 2005. Disponı́vel em: <http://www.geografia.fflch.usp.br/abclima/>. NEWTON, R. G. Scattering Theory of waves and particles. 2nd edition. ed. East 2nd Street, Mineola, N.Y. USA: Dover, 2002. OLIVEIRA JR, A. A.; SCHEER, S.; SATO, F. 3D visualization tool for meteorological radar data using webgl. In: Proceedings in 10th World Congress on Computational Mechanics. [S.l.: s.n.], 2012. ISBN 978-85-86686-70-2. DVD-ROM, Arquivo pdf WCCM2012-19264.pdf. PRATEANO, V.; RUPP, I.; GARMATTER, B. Chuva isola o litoral do Paraná. Gazeta do Povo, 12 mar. 2011. 108 RAGGETT, D. Extending WWW to support Platform Independent Virtual Reality. 1994. Disponı́vel em: <http://www.w3.org/People/Raggett/vrml/vrml.html>. Acesso em: 16 apr 2012. RENDER. Wikipédia - a enciclopédia livre. Disponı́vel em: <http://pt.wikipedia.org/wiki/Renderiza%C3%A7%C3%A3o>. Acesso em: 21 apr. 2012. RINEHART, R. E. Radar for Meteorologists. Nevada, MO, USA: Rinehart Publications, 2004. ROST, R. J. et al. OpenGL Shading Language. 2nd. ed. Boston, MA USA: Person Education Inc, 2006. ISBN 0321334892. RU, Y. Volumetric Visualization Of NEXRAD Level II Doppler Weather Data From Multiple Sites. Dissertação (Mestrado) — Purdue University, 5 dez. 2007. SCHROEDER, W. J.; YAMROM, B. A compact cell structure for scientific visualization. In: SIGGRAPH 94 Course Notes CD-ROM, Course 4: Advanced Techniques for Scientific Visualization. ACM, 1994. p. 53–59. Disponı́vel em: <www.kmh-lanl.hansonhub.com/publications/medim94.pdf>. SHADER. Wikipédia - a enciclopédia livre. Disponı́vel em: <http://pt.wikipedia.org/wiki/Shader>. Acesso em: 21 apr. 2012. SILVA NETO, M. A. Mineração Visual de Dados: Extração do Conhecimento a partir das Técnicas de Visualização da Informação e Mineração de Dados Experimentos: Itaipu e Simepar. Dissertação (Mestrado) — Universidade Federal do Paraná, 2008. TELEA, A. Data visualization : principles and practice. Wellesley, MA, USA: A.K. Peters, 2008. TRISOTTO, F.; GERON, V.; ANIBAL, F. Chuva derruba Árvores e deixa 28 bairros no escuro. Gazeta do Povo, 2 abr. 2011. WATT, A. 3D Computer Graphics. 3rd. ed. [S.l.]: Pearson Education Limited, 2000. ISBN 0201398559. WEB3D Consortium. X3D language bindings (ECMAScript and Java). American Society of Civil Engineers, abr. 2012. Disponı́vel em: <http://www.web3d.org/x3d/specifications/x3d/>. Acesso em: 16 apr 2012. WILSON, J. W. Precipitation nowcasting: Past, present and future. Sixth International Symposium on Hydrological Applications of Weather Radar, Melbourne, Australia, 2004. Disponı́vel em: <http://www.cawcr.gov.au/bmrc/basic/old events/hawr6/qpf/WILSON KEYNOTE.pdf>. Acesso em: 02 out. 2011. 109 APÊNDICE A -- Depoimentos Foram colhidos depoimentos para validação e testes do Visualizador. Os depoimentos foram colhidos após a apresentação da aplicação, explicação de seu funcionamento e demonstração do uso. Para demonstração foram utilizados dois conjuntos de dados: • Conjunto de dados da elevação de 0, 5◦ • Conjunto de dados com todas as 13 varreduras com os seguintes ângulos de elevação: 0, 5◦ , 1, 0◦ , 1, 5◦ , 2, 0◦ , 3, 0◦ , 4.0◦ , 5, 0◦ , 6, 5◦ , 8, 0◦ , 10, 0◦ , 12, 0◦ , 15, 0◦ , 18, 0◦ e 21, 0◦ . Para cada conjunto de dados, os dados foram visualizados e houve oportunidade de navegação com movimentos da câmera para demonstrar esta funcionalidade. Também foi utilizado o recurso de filtros dos dados, reduzindo os dados visualizados para aqueles fora da faixa de filtragem. Os valores dos filtros aplicados foram: • -24 dBZ a 0 dBZ • -24 dBZ a 24 dBZ • -24 dBZ a 36 dBZ Aos depoentes foi solicitado que respondessem uma questão objetiva : - Com base na sua experiência, a aplicação desenvolvida tem potencial de uso em ambiente operacional ? Também foi solicitado que os depoentes fizessem comentários sobre a aplicação, mencionando recursos, limitações e sugestões. 110 A.1 Dr. Leonardo Calvetti Dr. Leonardo Calvetti é Meteorologista-Pesquisador no Instituto Tecnológico Simepar. Doutor em Meteorologia pela Universidade de São Paulo (USP). Durante a demonstração da aplicação, deu depoimento sobre a aplicação ressaltando que o Meteorologista tem sua formação baseada em aplicações e ferramentas bidimensionais. Logo, ao ser apresentado para uma ferramenta bidimensional, sempre buscam-se planos horizontais e verticais. Quando perguntado sobre se existe potencial de uso para aplicação apresentada, disse que há potencial, porém em complemento a ferramenta bidimensional, isto devido a própria formação do Meteorologista. Durante a apresentação da aplicação, Dr. Leonardo achou muito interessante a navegabilidade, com a possibilidade de aproximação e verificação dos detalhes dos dados. Diante disto, propôs ainda várias sugestões, dizendo que a interpolação é necessária para melhorar a estética da imagem formada, que dará maior clareza e compreensão, principalmente devido ao interesse em apresentar as imagens para a mı́dia (jornais, televisão, etc). Enfatizou que a inclusão de aspectos de relevo e de topografia, tais como bacias hidrográficas, elevações e montanhas podem melhorar na compreensão de fenômenos severos (tempestades e chuvas intensas), pois pode-se verificar se a formação do evento ocorreu por influência das circulações “vale-montanha” dos ventos. Ainda, é possı́vel perceber com mais clareza fenômenos tı́picos de regiões, tais como formação de chuvas orográficas 1 do região da Serra do Mar e do litoral. Dr. Leornardo sugeriu ainda a inclusão de cidades e alteração de pontos de monitoramento e observação e implementar ao sistema capacidade para estimar altitudes para que se possa determinar diferença de altitudes entre a base da nuvem e o topo da nuvem, que são dados interessantes para compreensão de fenômenos. Outras sugestões incluem, a exportação de animação da navegação e de possibilidade de tirar uma foto da visualização corrente. Estas sugestões estão ligadas ao potencial de uso da aplicação para o estudo dos fenômenos, principalmente dos severos. Dr. Leonardo Calvetti 1 Chuva orográfica ou “chuva de relevo” é chuva causada pela mudança de altitude de camadas de ar devido a montanhas ou encostas, que forçam estas camadas a subir, provocando resfriamento da massa de ar e acarretando a chuva. São tı́picas de regiões serranas ou terrenos com encostas. 111 A.2 Dr. Reinaldo Silveira Dr. Reinaldo Silveira é Coordenador de Integração Tecnológica no Instituto Tec- nológico Simepar. Doutor em Matemática Aplicada pela University of Essex, Inglaterra. Durante a demonstração da aplicação achou a aplicação interessante. Comentou que a aplicação tem potencial de utilização tanto em pesquisa quanto no ambiente operacional. Segundo ele, a visualização tridimensional dos dados puros permitiu perceber os próprios artefatos do radar (Radar Artifacts)2 que muitas vezes não são percebidos em uma visualização bidimensional. Mencionou que um fator limitante é a velocidade de navegação da câmera quando da apresentação de todos os bins de todas as elevações (4.032.000 bins), mas sugeriu que vale o estudo de melhorias deste item, bem como alteração da posição da câmera e melhorar a aplicação da ferramenta de filtro, além da ferramenta já disponı́vel. Dr. Reinaldo Bomfim da Silveira 2 Radar Artifacts ou artefatos do radar são anomalias que acontecem na reflexão das ondas devido a variação do meio de propagação. São dificeis de interpretar. Um dos exemplos básicos é que se um eco de grande intensidade capturado, ecos “após” este eco podem ser dificeis de capturar, pois o conjunto de hidrometeoros que causou a alta refletividade, acabam por atrapalhar a coleta dos dados após este conjunto. 112 A.3 Fábio Sato Fábio Sato é Coordenador do Núcleo de Informática no Instituto Tecnológico Simepar. Engenheiro Civil com Pós Graduação em Tecnologia de Sistemas de Informação. Sr. Fábio Sato comentou que a tecnologia WebGL já pode ser considerada para desenvolvimento de aplicações de Visualização Cientı́fica. Quanto ao protótipo, mencionou: O protótipo desenvolvido permitiu avaliar desempenho e usabilidade de uma aplicação totalmente Web para radar meteorológico. A abordagem de visualização tridimensional de dados através da representação via Grid Estruturado Esférico nos deu algumas idéias de como esta técnica de visualização poderá ser utilizada em conjunto com as técnicas tradicionais em duas dimensões. Temos idéia de dar continuidade ao trabalho, explorando melhor as questões de desempenho e transferência de dados. Fábio Sato 113 APÊNDICE B -- JSON JSON - Javascript Object Notation ou Notação de Objetos Javascript é um formato para troca de dados. É fácil de ser lido ou escrito tanto por computadores quanto por seres humanos ((INTRODUCING. . . , 2012), (CROCKFORD; IETF, 2006)). É um sub conjunto de JavaScript ECMA 262 3rd edition de 1999 (ECMA, 2011). Apesar deste vı́nculo com JavaScript, é desvinculado desta linguagem, sendo utilizado em C, C++, Java, Python entre outras. É baseado em 2 estruturas principais : •Coleção de pares de nomes e valores •Lista de valores ordenados, sendo identificado como matrizes ou vetores ou sequência Objetos são definidos pelo conteúdo entre e . Os membros de um objeto são definidos entre as chaves, podendo conter outros objetos. Membros são pares de nome e valor, separados por :. Vários membros de um objeto são separados por vı́rgula. O nome define o nome do atributo ou propriedade do objeto, que é um string, enquanto que o valor é o valor desta propriedade. O nome é um string, que é definida entre “ e ”. Os valores podem ser: •Strings •Números •Objeto •valor booleano true ou false •null •matriz 114 Matrizes são estruturas que contém valores apenas contidos entre colchetes [] e separados por vı́rgula. Exemplos: Objeto contendo um atributo String “nome”:“Simples teste” Objeto contendo atributo numérico: “salario”:1000.00 Objeto contendo atributo matriz (ou array): “dados”:[10,20,30] Objeto contendo uma coleção (matriz) de outros objetos: “empregados”:[“nome”:“Fulano de tal”,“nome”:“Siclano de tal ”, “nome”:“José da Silva”] Os objetos definidos devem ser atribuı́dos a variáveis para que possam ser utilizados. E ao objeto que é atribuı́do, os pares de valores são acessados diretamente pelo nome. Exemplo: var t1 = “nome”:“Outro simples teste” No código JavaScript, acessando t1.nome, retornará o valor contido no atributo nome, no caso, Outro simples teste. 115 APÊNDICE C -- Código-fonte Visualizador O código-fonte está disponı́vel em formato eletrônico disponı́vel através de cd-rom depositado na Biblioteca Central da UFPR - Universidade Federal do Paraná.