Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- float4 computeTangent(float3 wsPosition, float3 wsNormal, float2 texCoord)
- {
- // compute cotangent T and cobitangent B
- float3 Q1 = ddx(wsPosition);
- float3 Q2 = ddy(wsPosition);
- float2 st1 = ddx(texCoord);
- float2 st2 = ddy(texCoord);
- float r = 1 / (st1.x * st2.y - st2.x * st1.y);
- float3 sdir = float3((st2.y * Q1.x - st1.y * Q2.x) * r, (st2.y * Q1.y - st1.y * Q2.y) * r, (st2.y * Q1.z - st1.y * Q2.z) * r);
- float3 tdir = float3((st1.x * Q2.x - st2.x * Q1.x) * r, (st1.x * Q2.y - st2.x * Q1.y) * r, (st1.x * Q2.z - st2.x * Q1.z) * r);
- float4 T;
- T.xyz = normalize(sdir - wsNormal * dot(wsNormal, sdir));
- T.w = (dot(cross(wsNormal, sdir), tdir) < 0) ? -1 : 1;
- return T;
- }
Advertisement
Add Comment
Please, Sign In to add comment