Visualizador de Panoramas

Nesta página, irei descrever e explicar o processo de desenvolvimento do visualizador de panoramas utilizado no projeto. Esta é uma etapa de alta prioridade até o final de dezembro de 2012

Objetivo

Este documento é uma descrição do processo de implementação relacionado ao visualizador de panoramas, parte integrante do aplicativo em desenvolvimento para o projeto Realidade Aumentada móvel. Espera-se facilitar o entendimento de todos os integrantes do grupo de desenvolvimento sobre esta área. Além disso, dado o caráter educacional…

Características gerais

O visualizador foi feito para imagens panorâmicas do tipo equirretangular. Para mais informações ver: IP . Para isso, foi construída uma esfera em OpenGL ES 2.0 (devido à característica mobile da aplicação), em cujo interior foi projetado o panorama como textura.

Por questões de desempenho, esta parte da aplicação, que é predominantemente gráfica, foi em sua maior parte, implementada em código nativo. Ou seja, utilizou-se código em C++ para acesso das funções da biblioteca OpenGL ES 2.0 e a JNI (Java Native Interface) para comunicação com código em Java. Pretende-se portar esta aplicação para o sistema iOS, utilizados pelos dispositivos da Apple. O uso de código em C/C++ e a padronização dos comandos OpenGL podem facilitar esta etapa.

// Descrição apenas da parte em C++

OpenGL ES 2.0

OpenGL é isso e aquilo, ES é a versão simplificada baseada nisso e naquilo….para ele se passam os vértices e forma de associação etc…

Vertex buffer Objects

Vertex attribute Arrays

Vertex Shader

Trecho do programa em que se define como serão realizadas as operações sobre os vértices.

Fragment Shader

Trecho do programa em que se define como serão realizadas as operações sobre os vértices fragmentos.

Programa e linking…

Interface JAVA e C/C++

ESFERA

Os vértices para esfera foram obtidos da parametrização XXX segundo a equação XXX. Esta parametrização permite obter facilmente pontos que podem ser associados a coordenadas de latitude e longitude. Assim, as coordenadas de textura destes pontos, em relação à imagem equirretangular, podem ser obtidas naturalmente.

As coordenadas de posição e de textura de cada vértice foram armazenadas sequencialmente na memória, referenciadas pelo mesmo ponteiro.

O construtor da esfera recebe valores inteiros para a quantidade de meridianos e paralelos desejada e um valor em ponto flutuante para o raio da esfera.

Dificuldades encontradas

  • Atentar para o correto cálculo das coordenadas de textura

  • Atentar para a obtenção das coordenadas RGBA da imagem. As imagens são carregadas dentro do código em Java e, por padrão, quando se obtém os pixels da imagem, a API do Android retorna um vetor de inteiros com uma constante para cada pixel. Essa constante deve ser tratada com a classe Color, que tem métodos específicos para se obter os valores RGBA a partir destes números inteiros.

Leave a Reply