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.

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

};<br />

on<strong>de</strong> iIdx é tal índice. Embora este seja um inteiro, sempre utilizamos números em ponto flutuante<br />

uma vez que nem todas as plataformas <strong>de</strong> hardware gráfico têm suporte nativo para inteiros no mo<strong>de</strong>lo<br />

<strong>de</strong> sha<strong>de</strong>r 3.0. De modo a amostrar o texel correto do mapa <strong>de</strong> posição <strong>de</strong> vértices – e qualquer outro<br />

mapa <strong>de</strong> atributos <strong>de</strong> vértices – que contém os dados do vértice correspon<strong>de</strong>nte ao índice, precisamos<br />

converter este índice 1D para um índice 2D, que é o par <strong>de</strong> coor<strong>de</strong>nadas (u, v) do texel. Isto é feito<br />

utilizando o seguinte código:<br />

float2 In<strong>de</strong>x1DTo2D( float iIdx, float2 vCons ) {<br />

}<br />

return float2( iIdx, iIdx ) * vCons;<br />

on<strong>de</strong> vCons é um vetor <strong>de</strong> dois componentes pré-computados, armazenado num registrador <strong>de</strong> cons-<br />

tante do sha<strong>de</strong>r. Esse registrador contém o valor 〈w −1<br />

map, (wmap∗hmap) −1 〉, on<strong>de</strong> wmap e hmap <strong>de</strong>notam<br />

a largura e altura do mapa <strong>de</strong> atributo <strong>de</strong> vértices, em texels. Esta função é traduzida para uma única<br />

instrução mul no assembly da GPU, <strong>de</strong> modo que ela é bastante eficiente. Como observado por Calver<br />

[2004], a operação <strong>de</strong> módulo não precisa ser utilizada explicitamente porque ela po<strong>de</strong> ser simulada<br />

pela API através do ajuste do flag <strong>de</strong> modo <strong>de</strong> en<strong>de</strong>reçamento da textura (D<strong>3D</strong>TADDRESS_WRAP em<br />

Direct<strong>3D</strong>, GL_TEXTURE_WRAP_S em OpenGL) sempre que um mapa <strong>de</strong> textura com atributos <strong>de</strong><br />

vértices é amostrado.<br />

No trabalho <strong>de</strong> Calver [2004], dados <strong>de</strong> adjacência são armazenados <strong>de</strong> forma semelhante aos<br />

dados <strong>de</strong> atributos <strong>de</strong> vértices, i.e., usando texturas como arranjos 2D <strong>de</strong> propósito geral. Os únicos<br />

dados <strong>de</strong> conectivida<strong>de</strong> necessários para calcular normais aos vértices são os índices das faces adja-<br />

centes a cada vértice e os índices dos vértices que compõem tais faces. Duas texturas são utilizadas<br />

para esse fim: um mapa contendo a lista <strong>de</strong> faces adjacentes a cada vértice (mapa <strong>de</strong> adjacência),<br />

com valência máxima <strong>de</strong> vértices limitada a oito, e um mapa <strong>de</strong> índices aos vértices que compõem<br />

cada face (mapa <strong>de</strong> faces). O mapa <strong>de</strong> faces é formatado como uma textura RGB na qual cada texel<br />

contém os três índices <strong>de</strong> vértices que compõem uma face. O mapa <strong>de</strong> adjacência é criado <strong>de</strong> forma<br />

similar, mas neste caso cada grupo <strong>de</strong> dois texels consecutivos correspon<strong>de</strong> a um dado <strong>de</strong> adjacência<br />

<strong>de</strong> um único vértice. Em especial, os texels são formatados como componentes <strong>de</strong> cor RGBα que<br />

armazenam até oito índices (um para cada componente <strong>de</strong> cor dos dois texels) <strong>de</strong> faces adjacentes a<br />

cada vértice.<br />

Ao utilizar texturas para armazenar arranjos <strong>de</strong> dados <strong>de</strong> geometria e dados <strong>de</strong> adjacência, os<br />

processadores <strong>de</strong> vértices e <strong>de</strong> fragmentos no mo<strong>de</strong>lo <strong>de</strong> sha<strong>de</strong>r 3.0 po<strong>de</strong>m acessar dados <strong>de</strong> quais-<br />

quer faces ou vértices por meio <strong>de</strong> amostragem <strong>de</strong>ssas texturas. Além disso, é possível utilizar a<br />

funcionalida<strong>de</strong> <strong>de</strong> ren<strong>de</strong>rização em texturas <strong>de</strong> modo a modificar o conteúdo <strong>de</strong>sses arranjos sem a

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

Saved successfully!

Ooh no, something went wrong!