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.

182 Sha<strong>de</strong>rs <strong>de</strong> estimativa <strong>de</strong> elementos <strong>de</strong> geometria diferencial <strong>de</strong> segunda e terceira or<strong>de</strong>m<br />

}<br />

Out.vColor[0] = float4( m, 0 );<br />

// Rotação <strong>de</strong> Jacobi para diagonalizar<br />

float ku = m[0], kuv = m[1], kv = m[2];<br />

float c = 1, s = 0, tt = 0;<br />

if( kuv != 0.0f )<br />

{<br />

}<br />

float h = 0.5f * (kv - ku) / kuv;<br />

tt = (h < 0.0f) ? 1.0f / (h - (float) sqrt(1.0f + h*h)) :<br />

1.0f / (h + (float) sqrt(1.0f + h*h));<br />

c = 1.0f / (float) sqrt(1.0f + tt*tt);<br />

s = tt * c;<br />

float fK1 = ku - tt * kuv,<br />

fK2 = kv + tt * kuv;<br />

float3 pd1, pd2;<br />

if( abs( fK1 ) >= abs( fK2 ) )<br />

else<br />

{<br />

}<br />

pd1 = c * vPDir1 - s * vPDir2;<br />

float fTemp = fK1; fK1 = fK2; fK1 = fTemp;<br />

pd1 = s * vPDir1 + c * vPDir2;<br />

pd2 = cross( vNormal, pd1 );<br />

// Grava direção e curvatura principal mínima<br />

Out.vColor[1] = float4( pd1, fK1 );<br />

// Grava direção e curvatura principal máxima<br />

Out.vColor[2] = float4( pd2, fK2 );<br />

return Out;<br />

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

// Calcula elementos <strong>de</strong> terceira or<strong>de</strong>m.

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

Saved successfully!

Ooh no, something went wrong!