示例#1
0
        private void Ring()
        {
            var    csgRing       = new CsgDifference().Rotate(rx: Pi / 2);
            var    outerRing     = new Cylinder(-0.01, 0.01, true);
            double ringThickness = 0.05;
            var    innerRing     = new Cylinder(-0.011, 0.011, true).Scale(sx: 1 - ringThickness, sz: 1 - ringThickness);

            csgRing.Init(outerRing, innerRing);

            double   delta   = 0.005;
            ColorMap ringMap = new ColorMap(
                (0, White / 8),
                (0.3 - delta, White / 8),
                (0.3, Cyan / 4),
                (0.3 + delta, White / 8),
                (0.5 - delta, White / 8),
                (0.5, Blue / 2),
                (0.5 + delta, White / 8),
                (1, Blue / 2)
                );
            double perlinScale = 15;
            var    ringPattern = new PerlinPattern(ringMap, 8)
                                 .Translate(tx: 1 / perlinScale, tz: 1 / perlinScale)
                                 .Scale(sx: perlinScale, sz: 10 * perlinScale, sy: perlinScale);

            csgRing.Material = new Material(ringPattern, ambient: 1, diffuse: 2, reflective: 1);

            Add(csgRing);
        }
示例#2
0
        private void LavaField()
        {
            ColorMap lavaFieldMap = new ColorMap(
                (0, Yellow * 0.8),
                (0.31, Yellow * 0.9),
                (0.32, White * 0.9),
                (0.33, Yellow),
                (0.7, Brown),
                (1, Brown / 4)
                );
            var    lavaPattern = new PerlinPattern(lavaFieldMap, 3).Rotate(ry: Pi / 3).Translate(tz: -10);
            IShape floor       = new Plane
            {
                Material = new Material(lavaPattern)
                {
                    Diffuse = 0, Specular = 0, Ambient = 1
                }
            };

            Add(floor);
        }
示例#3
0
        protected override Canvas Render(CameraRenderOptions options)
        {
            // Patterns
            var map1         = new ColorMap(new ColorMapEntry(0, Colors.White));
            var floorPattern = new PerlinPattern(map1, transform: Matrix4x4.CreateTranslation(-1000, 0, 0));

            // Shapes
            var floor = new Plane(
                "Floor",
                Matrix4x4.CreateRotationY(Math.PI / 4),
                new Material(pattern: floorPattern, specular: 0));

            var left = new Sphere(
                "Left",
                Matrix4x4.CreateScaling(0.33, 0.33, 0.33).Translate(-2, 0.33, -0.75),
                new Material(pattern: floorPattern, diffuse: 0.7, specular: 0.3));

            var middle = new Sphere(
                "Middle",
                Matrix4x4.CreateTranslation(-0.5, 1, 0.5),
                new Material(pattern: floorPattern, diffuse: 0.7, specular: 0.3));

            var right = new Sphere(
                "Right",
                Matrix4x4.CreateScaling(0.5, 0.5, 0.5).Translate(1.5, 0.5, -0.5),
                new Material(pattern: floorPattern, diffuse: 0.7, specular: 0.3));

            var light = new PointLight(new Point(-10, 10, -10), Colors.White);
            var world = new World(light, floor, left, middle, right);

            var cameraTransform = Matrix4x4.CreateLookAt(new Point(0, 1.5, -5), new Point(0, 1, 0), Vector.UnitY);
            var camera          = new Camera(CanvasWidth, CanvasHeight, Math.PI / 3, cameraTransform);

            Canvas canvas = camera.Render(world, options);

            return(canvas);
        }