Example #1
0
        public void UsingCubeMapping_ShouldLayoutTheAlignCheckPattern(double u, double v, Color expected)
        {
            var main    = new Color(1, 1, 1);
            var ul      = new Color(1, 0, 0);
            var ur      = new Color(1, 1, 0);
            var bl      = new Color(0, 1, 0);
            var br      = new Color(0, 1, 1);
            var pattern = new UvAlignCheck(main, ul, ur, bl, br);
            var c       = pattern.UvPatternAt(u, v);

            Assert.Equal(expected, c);
        }
Example #2
0
        public void FindingTheColorsOnMappedCube_ShouldWork(Point point, Color expected)
        {
            var red     = new Color(1, 0, 0);
            var yellow  = new Color(1, 1, 0);
            var brown   = new Color(1, 0.5, 0);
            var green   = new Color(0, 1, 0);
            var cyan    = new Color(0, 1, 1);
            var blue    = new Color(0, 0, 1);
            var purple  = new Color(1, 0, 1);
            var white   = new Color(1, 1, 1);
            var left    = new UvAlignCheck(yellow, cyan, red, blue, brown);
            var front   = new UvAlignCheck(cyan, red, yellow, brown, green);
            var right   = new UvAlignCheck(red, yellow, purple, green, white);
            var back    = new UvAlignCheck(green, purple, cyan, white, blue);
            var up      = new UvAlignCheck(brown, cyan, purple, red, yellow);
            var down    = new UvAlignCheck(purple, brown, green, blue, white);
            var pattern = new CubeMap(left, front, right, back, up, down);

            Assert.Equal(expected, pattern.PatternAt(point));
        }
Example #3
0
        public (World, Camera) Setup(int width, int height, double fov)
        {
            // ======================================================
            // the camera
            // ======================================================

            var camera = new Camera(width, height, fov)
            {
                Transform = Transformation.ViewTransform(
                    new Point(0, 0, -20),          // view from
                    new Point(0, 0, 0),            // view to
                    new Vector(0, 1, 0)),          // vector up

                ProgressMonitor = new ParallelConsoleProgressMonitor(height),
            };

            // ======================================================
            // light sources
            // ======================================================

            var light = new PointLight(
                new Point(0, 100, -100),
                new Color(0.25, 0.25, 0.25)
                );

            var light2 = new PointLight(
                new Point(0, -100, -100),
                new Color(0.25, 0.25, 0.25)
                );

            var light3 = new PointLight(
                new Point(-100, 0, -100),
                new Color(0.25, 0.25, 0.25)
                );

            var light4 = new PointLight(
                new Point(100, 0, -100),
                new Color(0.25, 0.25, 0.25)
                );

            var yellow = new Color(1, 1, 0);
            var cyan   = new Color(0, 1, 1);
            var red    = new Color(1, 0, 0);
            var blue   = new Color(0, 0, 1);
            var brown  = new Color(1, 0.5, 0);
            var green  = new Color(0, 1, 0);
            var purple = new Color(1, 0, 1);
            var white  = new Color(1, 1, 1);

            var left  = new UvAlignCheck(yellow, cyan, red, blue, brown);
            var front = new UvAlignCheck(cyan, red, yellow, brown, green);
            var right = new UvAlignCheck(red, yellow, purple, green, white);
            var back  = new UvAlignCheck(green, purple, cyan, white, blue);
            var up    = new UvAlignCheck(brown, cyan, purple, red, yellow);
            var down  = new UvAlignCheck(purple, brown, green, blue, white);

            var mapCubeMaterial = new Material()
            {
                Pattern  = new CubeMap(left, front, right, back, up, down),
                Ambient  = 0.2,
                Specular = 0.0,
                Diffuse  = 0.8,
            };

            var mappedCube1 = new Cube()
            {
                Transform = Transformation.Translation(-6, 2, 0) *
                            Transformation.Rotation_x(0.7854) *
                            Transformation.Rotation_y(0.7854),
                Material = mapCubeMaterial,
            };

            var mappedCube2 = new Cube()
            {
                Transform = Transformation.Translation(-2, 2, 0) *
                            Transformation.Rotation_x(0.7854) *
                            Transformation.Rotation_y(2.3562),
                Material = mapCubeMaterial,
            };

            var mappedCube3 = new Cube()
            {
                Transform = Transformation.Translation(2, 2, 0) *
                            Transformation.Rotation_x(0.7854) *
                            Transformation.Rotation_y(3.927),
                Material = mapCubeMaterial,
            };

            var mappedCube4 = new Cube()
            {
                Transform = Transformation.Translation(6, 2, 0) *
                            Transformation.Rotation_x(0.7854) *
                            Transformation.Rotation_y(5.4978),
                Material = mapCubeMaterial,
            };

            var mappedCube5 = new Cube()
            {
                Transform = Transformation.Translation(-6, -2, 0) *
                            Transformation.Rotation_x(-0.7854) *
                            Transformation.Rotation_y(0.7854),
                Material = mapCubeMaterial,
            };

            var mappedCube6 = new Cube()
            {
                Transform = Transformation.Translation(-2, -2, 0) *
                            Transformation.Rotation_x(-0.7854) *
                            Transformation.Rotation_y(2.3562),
                Material = mapCubeMaterial,
            };

            var mappedCube7 = new Cube()
            {
                Transform = Transformation.Translation(2, -2, 0) *
                            Transformation.Rotation_x(-0.7854) *
                            Transformation.Rotation_y(3.927),
                Material = mapCubeMaterial,
            };

            var mappedCube8 = new Cube()
            {
                Transform = Transformation.Translation(6, -2, 0) *
                            Transformation.Rotation_x(-0.7854) *
                            Transformation.Rotation_y(5.4978),
                Material = mapCubeMaterial,
            };

            World world = new World();

            world.Shapes = new List <Shape> {
                mappedCube1, mappedCube2, mappedCube3, mappedCube4, mappedCube5, mappedCube6, mappedCube7, mappedCube8
            };
            world.Lights = new List <ILight> {
                light, light2, light3, light4
            };

            return(world, camera);
        }