Advertisement
Guest User

Untitled

a guest
Aug 12th, 2016
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. mat3 cotangentFrame(vec3 N, vec3 p, vec2 uv)
  2. {
  3.     // get edge vectors of the pixel triangle
  4.     vec3 dp1 = dFdx(p);
  5.     vec3 dp2 = dFdy(p);
  6.     vec2 duv1 = dFdx(uv);
  7.     vec2 duv2 = dFdy(uv);
  8.  
  9.     // solve the linear system
  10.     vec3 dp2perp = cross( dp2, N );
  11.     vec3 dp1perp = cross( N, dp1 );
  12.     vec3 T = dp2perp * duv1.x + dp1perp * duv2.x;
  13.     vec3 B = dp2perp * duv1.y + dp1perp * duv2.y;
  14.  
  15.     // construct a scale-invariant frame
  16.     float invmax = inversesqrt(max(0.00000000000000001, max(dot(T, T), dot(B, B))));
  17.     return mat3( T * invmax, B * invmax, N );
  18. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement