Esempio n. 1
0
        public Colour Mix(Colour b, double pct)
        {
            Colour a = MulScalar(1 - pct);

            b = b.MulScalar(pct);
            return(a.Add(b));
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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)));
        }