diff --git a/modules/globebrowsing/shaders/renderer_fs.glsl b/modules/globebrowsing/shaders/renderer_fs.glsl index ad2334bf55..77926c9ce8 100644 --- a/modules/globebrowsing/shaders/renderer_fs.glsl +++ b/modules/globebrowsing/shaders/renderer_fs.glsl @@ -265,12 +265,26 @@ Fragment getFragment() { #if SHADOW_MAPPING_ENABLED float shadow = 1.0; - if ( shadowCoords.z >= 0 ) { + if ( shadowCoords.w > 1 ) { vec4 normalizedShadowCoords = shadowCoords; normalizedShadowCoords.z = normalizeFloat(normalizedShadowCoords.w - 0.3); normalizedShadowCoords.xy = normalizedShadowCoords.xy / normalizedShadowCoords.w; normalizedShadowCoords.w = 1.0; - shadow = textureProj(shadowMapTexture, normalizedShadowCoords); + //shadow = textureProj(shadowMapTexture, normalizedShadowCoords); + float sum = 0; + int fStep = 5; + for (int i = 0; i < fStep; ++i) { + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, -fStep + i)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, 0)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep + i, fStep - i)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, -fStep + i)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, fStep - i)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, -fStep + i)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, 0)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep - i, fStep - i)); + } + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, 0)); + shadow = sum / (8.f * fStep + 1.f); } frag.color.xyz *= shadow < 0.99 ? clamp(shadow + 0.5, 0.0, 1.0) : shadow; #endif diff --git a/modules/globebrowsing/shaders/rings_fs.glsl b/modules/globebrowsing/shaders/rings_fs.glsl index 34337c7fa8..551f1ebb01 100644 --- a/modules/globebrowsing/shaders/rings_fs.glsl +++ b/modules/globebrowsing/shaders/rings_fs.glsl @@ -76,7 +76,19 @@ Fragment getFragment() { normalizedShadowCoords.z = normalizeFloat(normalizedShadowCoords.w - 0.3); normalizedShadowCoords.xy = normalizedShadowCoords.xy / normalizedShadowCoords.w; normalizedShadowCoords.w = 1.0; - shadow = textureProj(shadowMapTexture, normalizedShadowCoords); + //shadow = textureProj(shadowMapTexture, normalizedShadowCoords); + float sum = 0; + int fStep = 2; + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, -fStep)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, 0)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2(-fStep, fStep)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, -fStep)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, 0)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( 0, fStep)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, -fStep)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, 0)); + sum += textureProjOffset(shadowMapTexture, normalizedShadowCoords, ivec2( fStep, fStep)); + shadow = sum / 9.f; } // The normal for the one plane depends on whether we are dealing diff --git a/modules/globebrowsing/src/shadowcomponent.cpp b/modules/globebrowsing/src/shadowcomponent.cpp index acea310fa5..1a64a0836f 100644 --- a/modules/globebrowsing/src/shadowcomponent.cpp +++ b/modules/globebrowsing/src/shadowcomponent.cpp @@ -246,11 +246,13 @@ namespace openspace { (static_cast(_distanceFraction)/1.0E5);*/ double multiplier = originalLightDistance * - (static_cast(_distanceFraction) / 10000.0); + (static_cast(_distanceFraction) / 1E17); // New light source position - glm::dvec3 lightPosition = data.modelTransform.translation + - (lightDirection * multiplier); + /*glm::dvec3 lightPosition = data.modelTransform.translation + + (lightDirection * multiplier);*/ + glm::dvec3 lightPosition = data.modelTransform.translation + + (diffVector * multiplier); //// Light Position //glm::dvec3 lightPosition = glm::dvec3(_sunPosition);