コード例 #1
0
        public void TestPatternCheckerZ()
        {
            var pattern = new CheckersPattern(Color.White, Color.Black);

            Assert.AreEqual(pattern.PatternAt(Point.Zero), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(0, 0, 0.99)), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(0, 0, 1.01)), Color.Black);
        }
コード例 #2
0
        public void CheckersShouldRepeatInZ()
        {
            var pat = new CheckersPattern(white, black);

            Assert.Equal(white, pat.GetColor(Vector4.CreatePosition(0, 0, 0)));
            Assert.Equal(white, pat.GetColor(Vector4.CreatePosition(0, 0, 0.99)));
            Assert.Equal(black, pat.GetColor(Vector4.CreatePosition(0, 0, 1.01)));
        }
コード例 #3
0
        public void CheckersShouldExtendInZ()
        {
            var pattern = new CheckersPattern(Color.WHITE, Color.BLACK);

            Assert.AreEqual(Color.WHITE, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(Color.WHITE, pattern.PatternAt(new Point(0, 0, 0.99)));
            Assert.AreEqual(Color.BLACK, pattern.PatternAt(new Point(0, 0, 1.01)));
        }
コード例 #4
0
        public void Pattern_Repeats_In_Z()
        {
            var pattern    = new CheckersPattern(Color.White, Color.Black);
            var unitSphere = new Sphere();

            pattern.ColorAt(new Point(0, 0, 0), unitSphere).ShouldBe(Color.White);
            pattern.ColorAt(new Point(0, 0, 0.99), unitSphere).ShouldBe(Color.White);
            pattern.ColorAt(new Point(0, 0, 1.01), unitSphere).ShouldBe(Color.Black);
        }
コード例 #5
0
        public void TestPatternCheckerPattern2D()
        {
            var checkers = new CheckersPattern(2, 2, Color.Black, Color.White);

            Assert.AreEqual(checkers.UVPatternAt(0.0, 0.0), Color.Black);
            Assert.AreEqual(checkers.UVPatternAt(0.5, 0.0), Color.White);
            Assert.AreEqual(checkers.UVPatternAt(0.0, 0.5), Color.White);
            Assert.AreEqual(checkers.UVPatternAt(0.5, 0.5), Color.Black);
            Assert.AreEqual(checkers.UVPatternAt(1.0, 1.0), Color.Black);
        }
コード例 #6
0
        public void TestPatternTextureMapPatternWithSphericalMap()
        {
            var checkers = new CheckersPattern(16, 8, Color.Black, Color.White);
            var pattern  = new TextureMap(checkers, Mapping.Spherical);

            Assert.AreEqual(pattern.PatternAt(new Point(0.4315, 0.4670, 0.7719)), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(-0.9654, 0.2552, -0.0534)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(0.1039, 0.7090, 0.6975)), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(-0.4986, -0.7856, -0.3663)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(-0.0317, -0.9395, 0.3411)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(0.4809, -0.7721, 0.4154)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(0.0285, -0.9612, -0.2745)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(-0.5734, -0.2162, -0.7903)), Color.White);
            Assert.AreEqual(pattern.PatternAt(new Point(0.7688, -0.1470, 0.6223)), Color.Black);
            Assert.AreEqual(pattern.PatternAt(new Point(-0.7652, 0.2175, 0.6060)), Color.Black);
        }
コード例 #7
0
        public void T08_3DChecker()
        {
            Pattern pattern = new CheckersPattern(new SolidColorPattern(Color.white),
                                                  new SolidColorPattern(Color.black));

            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0.99, 0, 0)));
            Assert.AreEqual(Color.black, pattern.PatternAt(new Point(1.01, 0, 0)));

            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0.99, 0)));
            Assert.AreEqual(Color.black, pattern.PatternAt(new Point(0, 1.01, 0)));

            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0, 0)));
            Assert.AreEqual(Color.white, pattern.PatternAt(new Point(0, 0, 0.99)));
            Assert.AreEqual(Color.black, pattern.PatternAt(new Point(0, 0, 1.01)));
        }
コード例 #8
0
        private static void TestCase07()
        {
            // Checker should repeat in x
            Pattern pattern = new CheckersPattern(white, black);

            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0.99f, 0, 0)));
            Assert.Equal(black, pattern.ColorAt(Tuple.Point(1.01f, 0, 0)));

            // Checker should repeat in y
            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0.99f, 0)));
            Assert.Equal(black, pattern.ColorAt(Tuple.Point(0, 1.01f, 0)));

            // Checker should repeat in z
            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0, 0)));
            Assert.Equal(white, pattern.ColorAt(Tuple.Point(0, 0, 0.99f)));
            Assert.Equal(black, pattern.ColorAt(Tuple.Point(0, 0, 1.01f)));
        }
コード例 #9
0
        private RTPattern BuildPattern(Values item)
        {
            RTPattern p         = null;
            var       type      = item["type"];
            var       colors    = item["colors"];
            var       transform = item["transform"];

            var a = ConvertToColor(colors[0]);
            var b = ConvertToColor(colors[1]);

            switch (type.String.ToLower())
            {
            case "stripes":
                p = new StripePattern(a, b);
                break;

            case "checkers":
                p = new CheckersPattern(a, b);
                break;

                //BlendedPattern
                //CheckersPattern
                //GradientPattern
                //NestedPattern
                //PerlinNoisePattern
                //RadialGradientPattern
                //RingPattern
                //SolidColorPattern
                //CubeMapPattern3D
                //CheckersPattern3D
                //UVImage
                //UVAlignCheck
                //TextureMap
            }

            if (!transform.IsEmpty)
            {
                p.Transform = BuildTransform(transform);
            }

            return(p);
        }
コード例 #10
0
        public static World Example3()
        {
            var world = new World();

            var ringPattern1 = new RingPattern(
                new Color(0.4, 0.4, 0.4),
                new Color(0.7, 0.7, 0.7))
            {
                Transform =
                    Transform.Scale(4, 4, 4),
            };

            var stripePattern1 = new StripePattern(
                new Color(0.2, 0.2, 0.2),
                new Color(0.5, 0.5, 1.0))
            {
                Transform =
                    Transform.Scale(0.1, 0.1, 0.1),
            };

            var checkers = new CheckersPattern(
                Color.White,
                Color.Black)
            {
                Transform =
                    Transform.Scale(1, 1, 1),
            };

            var nestedPattern = new NestedPattern(
                checkers,
                ringPattern1,
                stripePattern1);

            var pertubedPattern = new PertubedPattern(
                new SolidPattern(Color.Black),
                new SolidPattern(new Color(0.1, 0.2, 0.3)))
            {
                Transform = Transform.Scale(5.5, 5.5, 5.5),
            };

            var floor = new Plane
            {
                Material = new Material
                {
                    Pattern  = pertubedPattern,
                    Specular = 0,
                },
            };

            world.Objects.Add(floor);

            var gradientTransform =
                Transform.Translate(1, 0, 0) *
                Transform.Scale(2, 1, 1);

            var sphere = new Sphere
            {
                Transform =
                    Transform.Translate(0, 1, 0),

                Material = new Material
                {
                    Pattern = new GradientPattern(
                        new Color(1.0, 0.0, 0.0),
                        new Color(0.0, 0.0, 1.0))
                    {
                        Transform = gradientTransform,
                    },
                },
            };

            world.Objects.Add(sphere);

            var gradients = new[]
            {
                new GradientPattern(
                    new Color(1.0, 0.0, 0.0),
                    new Color(0.0, 0.0, 1.0))
                {
                    Transform = gradientTransform,
                },
                new GradientPattern(
                    new Color(1.0, 0.0, 0.0),
                    new Color(0.0, 1.0, 0.0))
                {
                    Transform = gradientTransform,
                },
                new GradientPattern(
                    new Color(0.0, 1.0, 0.0),
                    new Color(0.0, 0.0, 1.0))
                {
                    Transform = gradientTransform,
                },
                new GradientPattern(
                    new Color(0.5, 0.5, 0.0),
                    new Color(0.0, 0.5, 0.5))
                {
                    Transform = gradientTransform,
                },
                new GradientPattern(
                    new Color(0.5, 0.0, 0.5),
                    new Color(0.0, 1.0, 0.0))
                {
                    Transform = gradientTransform,
                },
            };

            const int n   = 1024;
            var       arc = 2 * Math.PI / n;

            for (var i = 0; i < n; i++)
            {
                const double r  = 0.15;
                var          gi = i % gradients.Length;

                var          ni      = (double)i / n;
                const double scatter = 15;
                var          q       = scatter * Rng.NextDouble();
                var          s       = new Sphere
                {
                    Transform =
                        Transform.RotateY(i * arc) *
                        Transform.Translate(0, r, 2 - r + q) *
                        Transform.Scale(r, r, r),

                    Material = new Material
                    {
                        Pattern = gradients[gi],
                    },
                };

                world.Objects.Add(s);
            }

            var light = new PointLight(
                Vector4.CreatePosition(-10, 10, -10),
                Color.White);

            world.Lights.Add(light);

            return(world);
        }