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.

Apêndice B<br />

Sha<strong>de</strong>rs <strong>de</strong> estimativa <strong>de</strong> elementos <strong>de</strong><br />

geometria diferencial <strong>de</strong> segunda e terceira<br />

or<strong>de</strong>m<br />

Neste apêndice apresentamos dois sha<strong>de</strong>rs <strong>de</strong> fragmentos utilizados para estimar elementos <strong>de</strong><br />

geometria diferencial <strong>de</strong> segunda e terceira or<strong>de</strong>m segundo as abordagens <strong>de</strong>scritas na seção 4.2. Os<br />

sha<strong>de</strong>rs requerem GPUs compatíveis com o mo<strong>de</strong>lo <strong>de</strong> sha<strong>de</strong>r 3.0 [Microsoft, 2006] ou posterior.<br />

O cálculo <strong>de</strong> elementos <strong>de</strong> geometria diferencial <strong>de</strong> segunda or<strong>de</strong>m é realizado pelo sha<strong>de</strong>r <strong>de</strong><br />

fragmentos Tensor2() e produz como resultado os três componentes do tensor <strong>de</strong> curvatura, as<br />

direções principais e curvaturas principais. Essa função assume que as normais aos vértices já foram<br />

calculadas e que a geometria já foi atualizada pelas <strong>de</strong>formações <strong>de</strong> vértices (veja o apêndice A).<br />

O sha<strong>de</strong>r <strong>de</strong> fragmentos Tensor3() calcula os quatro componentes do tensor <strong>de</strong> <strong>de</strong>rivada <strong>de</strong><br />

curvatura. Sua execução assume que a função Tensor2() foi executada previamente para calcular<br />

os mapas <strong>de</strong> texturas que contém os resultados das direções e curvaturas principais. Essas texturas<br />

são então acessadas pelos objetos <strong>de</strong> amostragem sP1K1 e sP2K2.<br />

Para simplificar a apresentação da listagem a seguir, a função ldltsv(), utilizada para resolver<br />

um sistema <strong>de</strong> equações lineares através da <strong>de</strong>composição LDL ′ , aceita um parâmetro N que indica<br />

a dimensão da matriz. Para evitar o uso <strong>de</strong> instruções <strong>de</strong> fluxo <strong>de</strong> controle dinâmico e assim aumentar<br />

a eficiência, esta função po<strong>de</strong> ser dividida em duas: <strong>Uma</strong> com o parâmetro fixado em três, para seu<br />

uso com Tensor2(), e outra com o parâmetro fixado em quatro, para seu com Tensor3().<br />

/////////////////////////////////////////////////////////////////////<br />

// Converte um índice 1D (iIdx) para um índice 2D <strong>de</strong> uma<br />

// textura (coor<strong>de</strong>nadas entre 0 e 1).<br />

// vCons = {1/w, 1/(w*h)} on<strong>de</strong> w e h são a largura e<br />

177

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

Saved successfully!

Ooh no, something went wrong!