Пример #1
0
        public static Material CreateDiffuseSpecular(ColorProbability diffuseProbabilities, ColorProbability specularProbabilities)
        {
            var drdgdb   = diffuseProbabilities.SumComponents();
            var srsgsb   = specularProbabilities.SumComponents();
            var pReflect = ColorProbability.MaxOfAdditions(diffuseProbabilities, specularProbabilities);
            var pDiffuse = pReflect * drdgdb / (drdgdb + srsgsb);

            return(new Material(
                       diffuseProbabilities,
                       specularProbabilities,
                       ColorProbability.Zero,
                       pDiffuse,
                       pReflect - pDiffuse,
                       Probability.Zero,
                       PhongBRDF(diffuseProbabilities, specularProbabilities),
                       Light.None,
                       RefractiveIndex.Vacuum
                       ));
        }
Пример #2
0
        public static Material CreateRefractive(
            ColorProbability specularProbabilities,
            ColorProbability refractiveProbabilities,
            RefractiveIndex refractiveIndex
            )
        {
            var sr = specularProbabilities.Red;
            var sg = specularProbabilities.Green;
            var sb = specularProbabilities.Blue;

            var rr = refractiveProbabilities.Red;
            var rg = refractiveProbabilities.Green;
            var rb = refractiveProbabilities.Blue;

            var pReflect = ColorProbability.MaxOfAdditions(specularProbabilities, refractiveProbabilities);
            var pRefract = ColorProbability.ProportionOfAdditions(specularProbabilities, refractiveProbabilities);

            return(new Material(
                       ColorProbability.Zero, specularProbabilities, refractiveProbabilities,
                       Probability.Zero, pReflect, pRefract,
                       PhongBRDF(ColorProbability.Zero, specularProbabilities),
                       Light.None, refractiveIndex
                       ));
        }