public Colour Mix(Colour b, double pct) { Colour a = MulScalar(1 - pct); b = b.MulScalar(pct); return(a.Add(b)); }
Colour sampleLights(Scene scene, Ray n, Random rand) { var nLights = scene.Lights.Length; if (nLights == 0) { return(Colour.Black); } if (LightMode == LightMode.LightModeAll) { Colour result = new Colour(); foreach (var light in scene.Lights) { result = result.Add(sampleLight(scene, n, rand, light)); } return(result); } else { // pick a random light var light = scene.Lights[rand.Next(nLights)]; return(sampleLight(scene, n, rand, light).MulScalar((double)nLights)); } }
public void AddSample(Colour sample) { Interlocked.Increment(ref Samples); if (Samples == 1) { M = sample; return; } Colour m = M; M = M.Add(sample.Sub(M).DivScalar((double)Samples)); V = V.Add(sample.Sub(m).Mul(sample.Sub(M))); }