private void ComputeMoon (double altitude) { Vector3 moonPos = ephemeris.GetMoonPositionHorizon (); moonPos.Normalize (); double cosZenith = moonPos.y; double zenith = Math.Acos (cosZenith); if (lastMoonT != T || lastMoonZenith != zenith) { lastMoonT = T; lastMoonZenith = zenith; lightingChanged = true; SilverLiningSpectrum moonSpectrumEarthDirect = new SilverLiningLunarSpectrum (); SilverLiningSpectrum moonSpectrumEarthScattered = new SilverLiningLunarSpectrum (); lunarSpectrum.ApplyAtmosphericTransmittance (zenith, cosZenith, T, altitude, ref moonSpectrumEarthDirect, ref moonSpectrumEarthScattered); float moonLuminance = MoonLuminance (); moonTransmittedLuminance = moonSpectrumEarthDirect.ToXYZ () * moonLuminance; moonScatteredLuminance = moonSpectrumEarthScattered.ToXYZ () * moonLuminance; if (isOvercast) { moonTransmittedLuminance = (moonTransmittedLuminance * (overcastBlend * overcastTransmission)) + (moonTransmittedLuminance * (1.0f - overcastBlend)); moonScatteredLuminance = (moonScatteredLuminance * (overcastBlend * overcastTransmission)) + (moonScatteredLuminance * (1.0f - overcastBlend)); } moonTransmittedLuminance = moonTransmittedLuminance * moonTransmissionScale; moonScatteredLuminance = moonScatteredLuminance * moonScatteredScale; } }