From 6697d7c93a17cec2ce64f30daa61d7a348a640ed Mon Sep 17 00:00:00 2001 From: Nissim Hadar Date: Fri, 13 Oct 2017 12:49:38 -0700 Subject: [PATCH] Simplified setHazeColor. --- libraries/model/src/model/Haze.cpp | 29 ++++++++--------------------- libraries/model/src/model/Haze.h | 23 +++++++++++++++-------- 2 files changed, 23 insertions(+), 29 deletions(-) diff --git a/libraries/model/src/model/Haze.cpp b/libraries/model/src/model/Haze.cpp index 3654fb3467..c98c44b7a2 100644 --- a/libraries/model/src/model/Haze.cpp +++ b/libraries/model/src/model/Haze.cpp @@ -31,32 +31,19 @@ enum HazeModes { // For color modulated mode, the colour values are used as range values, which are then converted to range factors // This is separate for each colour. // The colour value is converted from [0.0 .. 1.0] to [5.0 .. 3000.0] +const float OFFSET = 5.0f; +const float BIAS = (3000.0f - 5.0f) / (1.0f - 0.0f); void Haze::setHazeColor(const glm::vec3 hazeColor) { auto& params = _hazeParametersBuffer.get(); - if (params.hazeColor.r != hazeColor.r) { - _hazeParametersBuffer.edit().hazeColor.r = hazeColor.r; + if (params.hazeColor != hazeColor) { + _hazeParametersBuffer.edit().hazeColor = hazeColor; - float range = hazeColor.r * 2995.0f + 5.0f; - float factor = convertHazeRangeToHazeRangeFactor(range); - _hazeParametersBuffer.edit().colorModulationFactor.r = factor; + glm::vec3 range = hazeColor * BIAS + OFFSET; + glm::vec3 factor = convertHazeRangeToHazeRangeFactor(range); + _hazeParametersBuffer.edit().colorModulationFactor = factor; } - if (params.hazeColor.g != hazeColor.g) { - _hazeParametersBuffer.edit().hazeColor.g = hazeColor.g; - - float range = hazeColor.g * 2995.0f + 5.0f; - float factor = convertHazeRangeToHazeRangeFactor(range); - _hazeParametersBuffer.edit().colorModulationFactor.g = factor; - } - - if (params.hazeColor.b != hazeColor.b) { - _hazeParametersBuffer.edit().hazeColor.b = hazeColor.b; - - float range = hazeColor.b * 2995.0f + 5.0f; - float factor = convertHazeRangeToHazeRangeFactor(range); - _hazeParametersBuffer.edit().colorModulationFactor.b = factor; - } -} + } void Haze::setHazeEnableLightBlend(const bool isHazeEnableLightBlend) { auto& params = _hazeParametersBuffer.get(); diff --git a/libraries/model/src/model/Haze.h b/libraries/model/src/model/Haze.h index 7fe8de2735..2340f2fa05 100644 --- a/libraries/model/src/model/Haze.h +++ b/libraries/model/src/model/Haze.h @@ -22,25 +22,32 @@ namespace model { // f = exp(-d * b) // ln(f) = -d * b // b = -ln(f)/d - inline float convertHazeRangeToHazeRangeFactor(const float hazeRange_m) { return (float)-log(p_005) / hazeRange_m; } - - inline float convertHazeAltitudeToHazeAltitudeFactor(const float hazeAltitude_m) { - return (float)-log(p_005) / hazeAltitude_m; + inline glm::vec3 convertHazeRangeToHazeRangeFactor(const glm::vec3 hazeRange_m) { + return glm::vec3( + (float)(-log(p_005) / hazeRange_m.x), + (float)(-log(p_005) / hazeRange_m.y), + (float)(-log(p_005) / hazeRange_m.z)); } - // Derivation (s is th proportion of sun blend, a is the angle at which the blend is 50%, solve for m = 0.5 + inline float convertHazeRangeToHazeRangeFactor(const float hazeRange_m) { return (float)(-log(p_005) / hazeRange_m); } + + inline float convertHazeAltitudeToHazeAltitudeFactor(const float hazeAltitude_m) { + return (float)(-log(p_005) / hazeAltitude_m); + } + + // Derivation (s is the proportion of sun blend, a is the angle at which the blend is 50%, solve for m = 0.5 // s = dot(lookAngle, sunAngle) = cos(a) // m = pow(s, p) // log(m) = p * log(s) // p = log(m) / log(s) inline float convertDirectionalLightAngleToPower(const float directionalLightAngle) { - return log(0.5) / log(cos(RADIANS_PER_DEGREE * directionalLightAngle)); + return (float)(log(0.5) / log(cos(RADIANS_PER_DEGREE * directionalLightAngle))); } - const glm::vec3 initialHazeColor{ 0.5, 0.6, 0.7 }; + const glm::vec3 initialHazeColor{ 0.5f, 0.6f, 0.7f }; const float initialDirectionalLightAngle_degs{ 30.0f }; - const glm::vec3 initialDirectionalLightColor{ 1.0, 0.9, 0.7 }; + const glm::vec3 initialDirectionalLightColor{ 1.0f, 0.9f, 0.7f }; const float initialHazeBaseReference{ 0.0f }; // Haze range is defined here as the range the visibility is reduced by 95%