blob: 5f762434f7aad9a73c5cf5bff7e3d5e6f7997268 [file] [log] [blame]
#ifdef SPHERE_MAP
#define ENVMAP sampler2D
#define TEXENV texture2D
#else
#define ENVMAP samplerCube
#define TEXENV textureCube
#endif
// converts a normalized direction vector
// into a texture coordinate for fetching
// texel from a sphere map
vec2 Optics_SphereCoord(in vec3 dir){
float dzplus1 = dir.z + 1.0;
// compute 1/2p
// NOTE: this simplification only works if dir is normalized.
float inv_two_p = 1.414 * sqrt(dzplus1);
//float inv_two_p = sqrt(dir.x * dir.x + dir.y * dir.y + dzplus1 * dzplus1);
inv_two_p *= 2.0;
inv_two_p = 1.0 / inv_two_p;
// compute texcoord
return (dir.xy * vec2(inv_two_p)) + vec2(0.5);
}
vec4 Optics_GetEnvColor(in ENVMAP envMap, in vec3 dir){
#ifdef SPHERE_MAP
return texture2D(envMap, Optics_SphereCoord(dir));
#else
return textureCube(envMap, dir);
#endif
}