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
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