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.
74 Cálculo <strong>de</strong> elementos <strong>de</strong> geometria diferencial discreta na GPU<br />
<strong>de</strong> <strong>de</strong>rivadas <strong>de</strong> terceira or<strong>de</strong>m, em especial o tensor <strong>de</strong> <strong>de</strong>rivada <strong>de</strong> curvatura. Da mesma forma que<br />
o tensor <strong>de</strong> curvatura é obtido através da média dos tensores das faces, os coeficientes do tensor <strong>de</strong><br />
<strong>de</strong>rivada <strong>de</strong> curvatura são estimados para cada face e então aproximados para os vértices através <strong>de</strong><br />
uma média pon<strong>de</strong>rada. A formulação utilizada para estimar os coeficientes do tensor <strong>de</strong> <strong>de</strong>rivada<br />
<strong>de</strong> curvatura é aquela das equações 3.26 até 3.29, i.e., utilizando as direções principais como bases<br />
tangentes locais.<br />
4.2 Nossa proposta<br />
A seguir apresentamos nossa abordagem para a estimativa <strong>de</strong> proprieda<strong>de</strong>s <strong>de</strong> geometria diferen-<br />
cial na GPU sobre mo<strong>de</strong>los <strong>3D</strong> que sofrem <strong>de</strong>formações <strong>de</strong> geometria no processador <strong>de</strong> vértices. A<br />
estimativa <strong>de</strong> elementos <strong>de</strong> primeira or<strong>de</strong>m é realizada <strong>de</strong> acordo com algoritmos já conhecidos na<br />
literatura, mas adaptados à arquitetura das atuais GPUs. Para a estimativa <strong>de</strong> elementos <strong>de</strong> segunda<br />
e terceira or<strong>de</strong>m, propomos uma abordagem original <strong>de</strong> fácil implementação em hardware gráfico.<br />
Através <strong>de</strong> uma comparação com outras técnicas, mostramos que ela é ao mesmo tempo eficiente e<br />
capaz <strong>de</strong> fornecer resultados robustos até mesmo em malhas amostradas irregularmente ou com ruído<br />
<strong>de</strong> <strong>de</strong>slocamento ao longo do vetor normal.<br />
4.2.1 Elementos <strong>de</strong> primeira or<strong>de</strong>m<br />
Para a estimativa <strong>de</strong> elementos <strong>de</strong> primeira or<strong>de</strong>m, baseamo-nos no método <strong>de</strong> Calver [2004] que<br />
calcula a estimativa do vetor normal em cada vértice da malha segundo a adaptação para a GPU<br />
do tradicional algoritmo <strong>de</strong> dois passos <strong>de</strong> Blinn [1977]. Entretanto, para tornar o algoritmo mais<br />
robusto, removemos a limitação do número faces adjacentes. Ao contrário, consi<strong>de</strong>ramos todas as<br />
faces adjacentes a cada vértice ao computar a média dos vetores normais nos vértices. Desse modo,<br />
os resultados que po<strong>de</strong>mos obter são tão robustos quanto se eles tivessem sido realizados usando o<br />
algoritmo <strong>de</strong> Blinn [1977] na CPU.<br />
Para a proposta <strong>de</strong> uma arquitetura <strong>de</strong> suporte a tarefas <strong>de</strong> interação <strong>3D</strong>, esten<strong>de</strong>mos o método<br />
<strong>de</strong> Calver [2004] <strong>de</strong> modo a calcular os vetores tangentes e bitangentes alinhados segundo a para-<br />
metrização das coor<strong>de</strong>nadas <strong>de</strong> textura no mo<strong>de</strong>lo [Lengyel, 2003]. Para isso utilizamos o mesmo<br />
princípio <strong>de</strong> armazenar atributos <strong>de</strong> vértices e relações <strong>de</strong> adjacência em texturas. Assim como no<br />
cálculo <strong>de</strong> vetores normais, não impomos uma restrição quanto ao número máximo <strong>de</strong> faces adja-<br />
centes a cada vértice.<br />
Para criar um mapa <strong>de</strong> adjacência no qual o número <strong>de</strong> faces adjacentes a cada vértice não é<br />
fixo, primeiramente calculamos na CPU os índices das faces adjacentes a cada vértice. O resultado é