12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- vec3 computeReflectionCoords(vec4 worldPos, vec3 worldNormal)
- {
- #ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
- vec3 direction = normalize(vDirectionW);
- float t = clamp(direction.y * -0.5 + 0.5, 0., 1.0);
- float s = atan(direction.z, direction.x) * RECIPROCAL_PI2 + 0.5;
- return vec3(s, t, 0);
- #endif
- #ifdef REFLECTIONMAP_EQUIRECTANGULAR
- vec3 cameraToVertex = normalize(worldPos.xyz - vEyePosition);
- vec3 r = reflect(cameraToVertex, worldNormal);
- float t = clamp(r.y * -0.5 + 0.5, 0., 1.0);
- float s = atan(r.z, r.x) * RECIPROCAL_PI2 + 0.5;
- return vec3(s, t, 0);
- #endif
- #ifdef REFLECTIONMAP_SPHERICAL
- vec3 viewDir = normalize(vec3(view * worldPos));
- vec3 viewNormal = normalize(vec3(view * vec4(worldNormal, 0.0)));
- vec3 r = reflect(viewDir, viewNormal);
- r.z = r.z - 1.0;
- float m = 2.0 * length(r);
- return vec3(r.x / m + 0.5, 1.0 - r.y / m - 0.5, 0);
- #endif
- #ifdef REFLECTIONMAP_PLANAR
- vec3 viewDir = worldPos.xyz - vEyePosition;
- vec3 coords = normalize(reflect(viewDir, worldNormal));
- return vec3(reflectionMatrix * vec4(coords, 1));
- #endif
- #ifdef REFLECTIONMAP_CUBIC
- vec3 viewDir = worldPos.xyz - vEyePosition;
- vec3 coords = reflect(viewDir, worldNormal);
- #ifdef INVERTCUBICMAP
- coords.y = 1.0 - coords.y;
- #endif
- return vec3(reflectionMatrix * vec4(coords, 0));
- #endif
- #ifdef REFLECTIONMAP_PROJECTION
- return vec3(reflectionMatrix * (view * worldPos));
- #endif
- #ifdef REFLECTIONMAP_SKYBOX
- return vPositionUVW;
- #endif
- #ifdef REFLECTIONMAP_EXPLICIT
- return vec3(0, 0, 0);
- #endif
- }
|