03.04.2013 Views

Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp

Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp

Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

76 Cálculo <strong>de</strong> elementos <strong>de</strong> geometria diferencial discreta na GPU<br />

<strong>de</strong> estimativas <strong>de</strong> elementos <strong>de</strong> primeira or<strong>de</strong>m em si. Por outro lado, é necessária para o correto<br />

funcionamento do algoritmo caso o mo<strong>de</strong>lo sofra algum tipo <strong>de</strong> <strong>de</strong>formação na GPU. Se essa<br />

<strong>de</strong>formação não existir, o mapa <strong>de</strong> posições atualizadas não precisa ser empregado, pois o mapa<br />

<strong>de</strong> posições da geometria original já conterá os atributos corretos.<br />

2. Cálculo das bases tangentes às faces: Normais às faces também são calculadas como no<br />

algoritmo <strong>de</strong> Calver [2004]. Os índices dos vértices que compõem cada face são lidos do mapa<br />

<strong>de</strong> faces e a posição <strong>3D</strong> <strong>de</strong> cada vértice é lida do mapa <strong>de</strong> posições atualizadas <strong>de</strong> vértices. O<br />

vetor normal à face (não normalizado) resultante é armazenado no mapa <strong>de</strong> normais às faces.<br />

Para calcular os vetores tangentes, é necessário acessar coor<strong>de</strong>nadas <strong>de</strong> textura para cada vértice<br />

da face. Isto é feito através da amostragem <strong>de</strong> um mapa <strong>de</strong> atributos <strong>de</strong> vértices similar ao mapa<br />

<strong>de</strong> posição <strong>de</strong> vértices, mas contendo coor<strong>de</strong>nadas <strong>de</strong> textura. Os vetores tangente e bitangente<br />

não normalizados são calculados através da solução da equação 4.3. O resultado é armazenado<br />

em um mapa <strong>de</strong> vetores tangentes às faces e um mapa <strong>de</strong> vetores bitangentes às faces.<br />

<strong>Uma</strong> vez que essas operações são executadas no mesmo sha<strong>de</strong>r, utilizamos a funcionalida<strong>de</strong><br />

<strong>de</strong> ren<strong>de</strong>rização em múltiplos alvos <strong>de</strong> ren<strong>de</strong>rização para escrever em três diferentes mapas<br />

<strong>de</strong> texturas (mapa <strong>de</strong> normais às faces, mapa <strong>de</strong> vetores tangentes às faces e mapa <strong>de</strong> vetores<br />

bitangentes às faces) ao mesmo tempo.<br />

3. Cálculo das bases tangentes aos vértices: Para cada vértice, o mapa <strong>de</strong> índices <strong>de</strong> adjacência é<br />

amostrado <strong>de</strong> modo a obter o índice da primeira face adjacente na lista <strong>de</strong> adjacência e o número<br />

<strong>de</strong> faces adjacentes. A seguir, chamamos tais dados <strong>de</strong> iFirstAdjFace e iNumAdjFace,<br />

respectivamente. Para cada face adjacente n (n ∈ [0, iNumAdjFace)), o mapa <strong>de</strong> adjacência<br />

é amostrado com relação ao índice n + iFirstAdjFace <strong>de</strong> modo a obter o índice da face<br />

adjacente que está sendo processada. Os vetores normal, tangente e bitangente à face são obti-<br />

dos dos mapas <strong>de</strong> normais às faces, vetores tangentes às faces e vetores bitangentes às faces. A<br />

soma das normais às faces é normalizada e o resultado é armazenado em um mapa <strong>de</strong> normais<br />

aos vértices. A soma dos vetores tangentes às faces é ortogonalizada com relação às normais<br />

às faces acumuladas usando o algoritmo <strong>de</strong> Gram-Schmidt. O resultado é normalizado e ar-<br />

mazenado em um mapa <strong>de</strong> vetores tangentes aos vértices. Os vetores bitangentes aos vértices<br />

não são armazenados em uma textura, pois po<strong>de</strong>m ser obtidos do produto vetorial entre os ve-<br />

tores normais e os vetores tangentes. Por outro lado, os vetores bitangentes são utilizados para<br />

se <strong>de</strong>terminar se, nesses produtos vetoriais, eles apontam na direção obtida pela regra da mão<br />

direita ou esquerda. Isso é feito com o produto vetorial N × T, comparando a sua direção com<br />

a direção do vetor bitangente acumulado. Apenas este resultado é guardado, o que requer um<br />

bit por texel (e.g., 0 para N × T, 1 para T × N). Na prática, armazenamos esta informação no

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!