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); }
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); }
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); }