!!ARBvp1.0 ATTRIB normal = vertex.normal; ATTRIB tangent = vertex.attrib[0]; PARAM mvp[4] = {state.matrix.mvp}; PARAM camera = program.env[0]; PARAM light = program.env[1]; TEMP bitangent, vdir, ldir, temp; # Transform vertex DP4 result.position.x, mvp[0], vertex.position; DP4 result.position.y, mvp[1], vertex.position; DP4 result.position.z, mvp[2], vertex.position; DP4 result.position.w, mvp[3], vertex.position; # B = (N x T) * T.w XPD bitangent, normal, tangent; MUL bitangent, bitangent, tangent.w; # Calculate normalized V and L ADD vdir, camera, -vertex.position; ADD ldir, light, -vertex.position; DP3 temp.x, vdir, vdir; DP3 temp.y, ldir, ldir; RSQ temp.x, temp.x; RSQ temp.y, temp.y; MUL vdir, vdir, temp.x; MUL ldir, ldir, temp.y; # Transform into tangent space DP3 result.texcoord[1].x, tangent, vdir; DP3 result.texcoord[1].y, bitangent, vdir; DP3 result.texcoord[1].z, normal, vdir; DP3 result.texcoord[2].x, tangent, ldir; DP3 result.texcoord[2].y, bitangent, ldir; DP3 result.texcoord[2].z, normal, ldir; END