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