public WavelengthCluster(SpectralDistribution spd, float[] ls) { LambdaStart = ls[0]; Values = new float[ls.Length]; Lambdas = ls.ToArray(); spd.Sample(ls.Length, ls, Values); }
public void SetDistributions(ref RgbSpectrum kd, ref RgbSpectrum ks, ref RgbSpectrum kr, ref RgbSpectrum ke, ref RgbSpectrum kt) { this.Kd = ColorFactory.CreateRegularSpd(ref kd, SpectrumType.Reflectance); this.Ks = ColorFactory.CreateRegularSpd(ref ks, SpectrumType.Reflectance); this.Kr = ColorFactory.CreateRegularSpd(ref kr, SpectrumType.Reflectance); this.Kt = ColorFactory.CreateRegularSpd(ref kt, SpectrumType.Reflectance); this.Ke = ColorFactory.CreateRegularSpd(ref ke, SpectrumType.Reflectance); }
public void SetMaterialInfo(MaterialInfo mi) { if (mi == null) { var col = new RgbSpectrum(0.5f); this.Kd = ColorFactory.CreateRegularSpd(ref col, SpectrumType.Reflectance); return; } this.MaterialInfo = mi; this.Kd = ColorFactory.CreateRegularSpd(ref mi.Kd, SpectrumType.Reflectance); this.Ks = ColorFactory.CreateRegularSpd(ref mi.Ks, SpectrumType.Reflectance); this.Kr = ColorFactory.CreateRegularSpd(ref mi.Kr, SpectrumType.Reflectance); this.Kt = ColorFactory.CreateRegularSpd(ref mi.Kt, SpectrumType.Reflectance); this.Ke = ColorFactory.CreateRegularSpd(ref mi.Ke, SpectrumType.Reflectance); }
public static RgbSpectrum ToRgb(SpectralDistribution spd) { var c = new RgbSpectrum(); float[] vc = new float[SampledSpectrum.nCIE]; spd.Sample(SampledSpectrum.nCIE, SampledSpectrum.CIE_lambda, vc); for (var i = 0; i < SampledSpectrum.nCIE; ++i) { float v = spd.Sample(i + SampledSpectrum.CIEstart); vc[i] = v; } /* for (var i = 0; i < SampledSpectrum.nCIE; ++i) { float v = spd.Sample(i + SampledSpectrum.CIEstart); c.c1 += v * SampledSpectrum.CIE_X[i]; c.c2 += v * SampledSpectrum.CIE_Y[i]; c.c3 += v * SampledSpectrum.CIE_Z[i]; }*/ c = new RgbSpectrum( SSE.VectorDot(vc, SampledSpectrum.CIE_X, 468), SSE.VectorDot(vc, SampledSpectrum.CIE_Y, 468), SSE.VectorDot(vc, SampledSpectrum.CIE_Z, 468)); var xyz = (c / 683f); float[] rgb; SampledSpectrum.XYZToRGB(xyz.ToArray(), out rgb); c = new RgbSpectrum(rgb); //res.GammaCorrection(); return c; }
public RgbSpectrum ToXyz(SpectralDistribution spd) { var c = new RgbSpectrum(); for (var i = 0; i < SampledSpectrum.nCIE; ++i) { float v = spd.Sample(i + SampledSpectrum.CIEstart); c.c1 += v * SampledSpectrum.CIE_X[i]; c.c2 += v * SampledSpectrum.CIE_Y[i]; c.c3 += v * SampledSpectrum.CIE_Z[i]; } var xyz = (c / 683f) * SampledSpectrum.yint; //(c / 300f); return xyz; }