MCPcopy Create free account
hub / github.com/TheRealMJP/BakingLab / UpdateAreaLightUnits

Function UpdateAreaLightUnits

BakingLab/AppSettings.cpp:823–876  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

821 }
822
823 static void UpdateAreaLightUnits()
824 {
825 static LightUnits prevUnits = AreaLightUnits;
826 const LightUnits currUnits = AreaLightUnits;
827
828 const float size = AreaLightSize;
829 const float distance = AreaLightIlluminanceDistance;
830
831 // Compute the luminance from our currently active unit
832 float luminance = AreaLightColor.Intensity();
833 if(prevUnits == LightUnits::Illuminance)
834 {
835 float illuminance = AreaLightIlluminance;
836 float angularRadius = std::atan2(size, distance);
837 float integralFactor = IlluminanceIntegral(angularRadius);
838 luminance = illuminance / integralFactor;
839 }
840 else if(prevUnits == LightUnits::LuminousPower)
841 {
842 float luminousPower = AreaLightLuminousPower;
843 luminance = luminousPower / (4 * size * size * Pi * Pi);
844 }
845 else if(prevUnits == LightUnits::EV100)
846 {
847 float ev100 = AreaLightEV100;
848 luminance = std::pow(2.0f, ev100 - 3.0f);
849 }
850
851 // Set the new luminance onto the color
852 AreaLightColor.SetIntensity(luminance);
853
854 // Update the other units
855 float angularRadius = std::atan2(size, distance);
856 float integralFactor = IlluminanceIntegral(angularRadius);
857 float illuminance = luminance * integralFactor;
858 AreaLightIlluminance.SetValue(illuminance);
859
860 float luminousPower = luminance * (4 * size * size * Pi * Pi);
861 AreaLightLuminousPower.SetValue(luminousPower);
862
863 float ev100 = std::log2(luminance) + 3.0f;
864 AreaLightEV100.SetValue(ev100);
865
866 if(prevUnits != currUnits)
867 {
868 AreaLightColor.SetIntensityVisible(currUnits == LightUnits::Luminance);
869 AreaLightIlluminance.SetVisible(currUnits == LightUnits::Illuminance);
870 AreaLightLuminousPower.SetVisible(currUnits == LightUnits::LuminousPower);
871 AreaLightEV100.SetVisible(currUnits == LightUnits::EV100);
872 AreaLightIlluminanceDistance.SetVisible(currUnits == LightUnits::Illuminance);
873
874 prevUnits = currUnits;
875 }
876 }
877
878 void UpdateUI()
879 {

Callers 1

UpdateUIFunction · 0.85

Calls 8

atan2Function · 0.85
IlluminanceIntegralFunction · 0.85
IntensityMethod · 0.80
SetIntensityMethod · 0.80
SetIntensityVisibleMethod · 0.80
SetVisibleMethod · 0.80
powFunction · 0.50
SetValueMethod · 0.45

Tested by

no test coverage detected