scale() public static méthode

public static scale ( float k, Color v ) : Color
k float
v Color
Résultat Color
Exemple #1
0
        private Color getReflectionColor(Object3D thing, Vector3 pos, Vector3 normal, Vector3 rd, Scene scene, int depth)
        {
            var n = thing.surface.reflect(pos);

            var c = this.traceRay(new Ray {
                Position = pos, Direction = rd
            }, scene, depth + 1);

            return(Color.scale(thing.surface.reflect(pos), c));
        }
Exemple #2
0
        private Color getNaturalColor(Object3D thing, Vector3 pos, Vector3 norm, Vector3 rd, Scene scene)
        {
            List <Color> colors = new List <Color>();

            foreach (var light in scene.lights)
            {
                var ldis = light.pos - pos;

                var livec = Vector3.Normalize(ldis);

                var neatIsect = this.testRay(new Ray {
                    Position = pos, Direction = livec
                }, scene);

                var isInShadow = (neatIsect == null) ? false : neatIsect.Value <= ldis.Length();

                if (isInShadow)
                {
                    colors.Add(Color.defaultColor);
                }
                else
                {
                    var illum = Vector3.Dot(livec, norm);

                    var lcolor = (illum > 0) ? Color.scale(illum, light.color) : Color.defaultColor;

                    var specular = Vector3.Dot(livec, Vector3.Normalize(rd));

                    var scolor = (specular > 0) ? Color.scale((float)System.Math.Pow(specular, thing.surface.roughness), light.color) : Color.defaultColor;

                    var outc = Color.plus(Color.defaultColor, Color.plus(Color.times(thing.surface.diffuse(pos), lcolor), Color.times(thing.surface.specular(pos), scolor)));

                    colors.Add(outc);
                }
            }

            var cl = new Color(0, 0, 0);

            foreach (var c in colors)
            {
                cl.r += c.r;
                cl.g += c.g;
                cl.b += c.b;
            }

            return(cl);
        }