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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4.1 Estimativas em superfícies discretas 67<br />

intervenção da CPU. Isto po<strong>de</strong> ser feito no processador <strong>de</strong> fragmentos ao amostrar cada texel do mapa<br />

<strong>de</strong> textura <strong>de</strong> origem, modificar a informação obtida e escrever o resultado a uma textura <strong>de</strong> <strong>de</strong>stino<br />

com um mapeamento biunívoco entre os texels <strong>de</strong> ambas as texturas. Tal procedimento é freqüen-<br />

temente implementado através da ren<strong>de</strong>rização <strong>de</strong> um quadrilátero que cobre a textura <strong>de</strong> <strong>de</strong>stino (o<br />

alvo <strong>de</strong> ren<strong>de</strong>rização), e mapeado com a textura <strong>de</strong> origem <strong>de</strong> modo que cada fragmento rasterizado<br />

do quadrilátero correspon<strong>de</strong> a um texel da textura <strong>de</strong> <strong>de</strong>stino. Conforme <strong>de</strong>talhamos na seção 2.4.3,<br />

isto simula o funcionamento <strong>de</strong> um processador <strong>de</strong> fluxo no qual cada elemento <strong>de</strong> um fluxo <strong>de</strong> en-<br />

trada é processado por uma função kernel (neste caso, o sha<strong>de</strong>r <strong>de</strong> fragmentos) e o resultado é enviado<br />

a um fluxo <strong>de</strong> saída.<br />

Os únicos atributos associados aos vértices do quadrilátero são as coor<strong>de</strong>nadas <strong>de</strong> textura que<br />

mapeiam a textura <strong>de</strong> origem no quadrilátero. <strong>Uma</strong> vez que os texels da textura <strong>de</strong> origem são ma-<br />

peados <strong>de</strong> forma biunívoca aos texels da textura <strong>de</strong> <strong>de</strong>stino, as coor<strong>de</strong>nadas <strong>de</strong> textura interpoladas,<br />

fornecidas como entrada do processador <strong>de</strong> fragmentos, correspon<strong>de</strong>m automaticamente aos índices<br />

dos arranjos convertidos em 2D. Dessa forma, a função In<strong>de</strong>x1DTo2D não precisa ser utilizada<br />

neste caso.<br />

No algoritmo <strong>de</strong> Calver [2004], os vetores normais po<strong>de</strong>m ser calculados simultaneamente com a<br />

ren<strong>de</strong>rização do mo<strong>de</strong>lo, ou po<strong>de</strong>m ser armazenados em novas texturas – evitando, assim, a transfe-<br />

rência <strong>de</strong> dados entre a CPU e a GPU – que po<strong>de</strong>m ser amostradas no processador <strong>de</strong> vértices durante<br />

o passo <strong>de</strong> ren<strong>de</strong>rização. Como forma <strong>de</strong> simplificar a implementação, o algoritmo impõe um limite<br />

máximo <strong>de</strong> 6 a 8 faces adjacentes a cada vértice (o vetor normal ao vértice é calculado como a média<br />

dos vetores normais das faces adjacentes).<br />

O algoritmo é baseado no algoritmo <strong>de</strong> Blinn [1977] que primeiramente calcula os vetores normais<br />

às faces e, para cada vértice, normaliza os vetores normais acumulados das faces adjacentes. Na GPU,<br />

isso é implementado como três passos <strong>de</strong> ren<strong>de</strong>rização usando a estratégia <strong>de</strong> processamento <strong>de</strong> fluxo<br />

<strong>de</strong>scrita anteriormente. O primeiro passo armazena os atributos modificados da geometria <strong>de</strong>formada,<br />

enquanto que os outros dois utilizam estes dados para finalmente calcular as normais às faces e aos<br />

vértices:<br />

1. Atualização da posição dos vértices: Cada texel do mapa <strong>de</strong> posição <strong>de</strong> vértices é lido e<br />

processado pela função <strong>de</strong> <strong>de</strong>formação <strong>de</strong>pen<strong>de</strong>nte da aplicação. O resultado é armazenado em<br />

um novo mapa <strong>de</strong> posição <strong>de</strong> vértices que é utilizado nos passos subseqüentes.<br />

2. Cálculo das normais às faces: Cada texel do mapa <strong>de</strong> faces é lido <strong>de</strong> modo a obter os 3 índices<br />

dos vértices que compõem a face. O mapa <strong>de</strong> vértices atualizado é então amostrado nos índices<br />

dados <strong>de</strong> modo a obter a posição <strong>3D</strong> <strong>de</strong> cada vértice da face, no sistema <strong>de</strong> coor<strong>de</strong>nadas do<br />

objeto. Com tais dados, a normal à face é obtida através do produto vetorial <strong>de</strong> quaisquer dois

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

Saved successfully!

Ooh no, something went wrong!