public SilverLiningSky () { sunDistance *= (float)SilverLining.unitScale; moonDistance *= (float)SilverLining.unitScale; H *= (float)SilverLining.unitScale; ephemeris = new SilverLiningEphemeris (); InitTwilightLuminances (); sunSpectrum = new SilverLiningSolarSpectrum (); lunarSpectrum = new SilverLiningLunarSpectrum (); XYZ2RGB = new SilverLiningMatrix3 (3.240479, -0.969256, 0.055648, -1.537150, 1.875992, -0.204043, -0.498535, 0.041556, 1.057311); XYZ2RGB4 = new Matrix4x4 (); XYZ2RGB4[0, 0] = 3.240479f; XYZ2RGB4[0, 1] = -0.969256f; XYZ2RGB4[0, 2] = 0.055648f; XYZ2RGB4[0, 3] = 0.0f; XYZ2RGB4[1, 0] = -1.537150f; XYZ2RGB4[1, 1] = 1.875992f; XYZ2RGB4[1, 2] = -0.204043f; XYZ2RGB4[1, 3] = 0.0f; XYZ2RGB4[2, 0] = -0.498535f; XYZ2RGB4[2, 1] = 0.041556f; XYZ2RGB4[2, 2] = 1.057311f; XYZ2RGB4[2, 3] = 0.0f; XYZ2RGB4[3, 0] = 0.0f; XYZ2RGB4[3, 1] = 0.0f; XYZ2RGB4[3, 2] = 0.0f; XYZ2RGB4[3, 3] = 1.0f; hosekWilkieRadiances = new double[3]; hosekWilkieCoeffs = new double[3,9]; datasetsXYZ = new double[][] { datasetXYZ1, datasetXYZ2, datasetXYZ3 }; datasetsXYZRad = new double[][] { datasetXYZRad1, datasetXYZRad2, datasetXYZRad3 }; }
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; } }
public SilverLiningSky() { sunDistance *= (float)SilverLining.unitScale; moonDistance *= (float)SilverLining.unitScale; H *= (float)SilverLining.unitScale; ephemeris = new SilverLiningEphemeris (); InitTwilightLuminances (); sunSpectrum = new SilverLiningSolarSpectrum (); lunarSpectrum = new SilverLiningLunarSpectrum (); XYZ2RGB = new SilverLiningMatrix3 (3.240479, -0.969256, 0.055648, -1.537150, 1.875992, -0.204043, -0.498535, 0.041556, 1.057311); XYZ2RGB4 = new Matrix4x4 (); XYZ2RGB4[0, 0] = 3.240479f; XYZ2RGB4[0, 1] = -0.969256f; XYZ2RGB4[0, 2] = 0.055648f; XYZ2RGB4[0, 3] = 0.0f; XYZ2RGB4[1, 0] = -1.537150f; XYZ2RGB4[1, 1] = 1.875992f; XYZ2RGB4[1, 2] = -0.204043f; XYZ2RGB4[1, 3] = 0.0f; XYZ2RGB4[2, 0] = -0.498535f; XYZ2RGB4[2, 1] = 0.041556f; XYZ2RGB4[2, 2] = 1.057311f; XYZ2RGB4[2, 3] = 0.0f; XYZ2RGB4[3, 0] = 0.0f; XYZ2RGB4[3, 1] = 0.0f; XYZ2RGB4[3, 2] = 0.0f; XYZ2RGB4[3, 3] = 1.0f; }