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.

}<br />

}<br />

fIdx2 = Idx1DTo2D( vAdjIdx.x + iCt, g_vAdjCons );<br />

float fFIdx = tex2Dlod( sAdj, float4(fIdx2,0,0) );<br />

// Lê a normal à face<br />

fIdx2 = Idx1DTo2D( fFIdx, g_vFaceCons );<br />

float3 vFN = tex2Dlod( sFaceN, float4(fIdx2,0,0) );<br />

// Lê tangente e bitangente à face<br />

float3 vFT = tex2Dlod( sFaceT, float4(fIdx2,0,0) );<br />

float3 vFB = tex2Dlod( sFaceB, float4(fIdx2,0,0) );<br />

// Acumula a contribuição <strong>de</strong>sta face<br />

vSumN += vFN;<br />

vSumT += vFT;<br />

vSumB += vFB;<br />

// Grava o vetor normal ao vértice<br />

float3 vVtN = normalize( vSumN );<br />

Out.vNT[0] = float4( vVtN, 1.0f );<br />

// Ortonormaliza a base tangente usando Gram-Schmidt<br />

float3 vRes = normalize( vSumT - vVtN * dot( vVtN, vSumT ) );<br />

float4 vVtT = float4( vRes, 1.0 );<br />

// Calcula regra <strong>de</strong> mão utilizada<br />

if( dot( cross( vVtN, vSumT ), vSumB ) < 0.0f )<br />

vVtT.w = 0.0;<br />

// Grava no mapa <strong>de</strong> tangentes aos vértices<br />

Out.vNT[1] = vVtT;<br />

return Out;<br />

175

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

Saved successfully!

Ooh no, something went wrong!