public static void RdrTimeMaps() { int nx = 800; int ny = 600; double radius = 31; double cam_z = 30; int N = 60; double dtheta = 2 * Math.PI / N; for (int i = 0; i < N; i++) { Info.WriteLine(i); double theta = 0.5 * Math.PI + i * dtheta; Camera c = new Camera(new Triple(-radius * Math.Cos(-theta), radius * Math.Sin(-theta), cam_z), 0, 0, nx, ny, 0.9); c.AzimuthAngle = theta; Background basic = new Background(); GlobalLightSource light = new GlobalLightSource(new Triple(1, 2, -4)); Scene main_scene = new Scene(basic, c); Stl stl_subject = new Stl("stl/cat.stl"); FacetBody subject = stl_subject.ToFacetBody(new Triple(0, 0, 25)); RectangularPrism floor = new RectangularPrism(new Triple(0, 0, 21.3), 190, 190, 0.3); subject.BodyOpticalProperties.BaseColor = new Triple(0.2, 0.2, 0.9); subject.BodyOpticalProperties.IsReflective = true; subject.BodyOpticalProperties.Reflectivity = 0.21; main_scene.AddBody(floor); main_scene.AddBody(subject); main_scene.AddLight(light); double[,] dist, ts; int[,] id; RayImage picture = main_scene.Render(out dist, out id, out ts); RayImage dist_picture = RayImage.ArrayLogRangeXY(dist, ColorGradient.Jedi()); RayImage t_picture = RayImage.ArrayLogRangeXY(ts, ColorGradient.Jedi()); picture.Save("outputdata/images/" + i.ToString().PadLeft(N.ToString().Length, '0') + ".png"); dist_picture.Save("outputdata/dists/" + i.ToString().PadLeft(N.ToString().Length, '0') + ".png"); t_picture.Save("outputdata/times/" + i.ToString().PadLeft(N.ToString().Length, '0') + ".png"); } /*double[,] a = new double[nx, ny]; * for (int x = 0; x < nx; x++) * { * for (int y = 0; y < ny; y++) * { * a[x,y] = (double)(x+y); * } * } * RayImage test = RayImage.ArrayRangeXY(a, ColorGradient.Rgb()); * test.Save("frames/s.png");*/ }
public static void Liberty() { int nx = 1950; int ny = 1000; double radius = 280; double cam_z = 26; double theta = 0.5 * Math.PI; Camera c = new Camera(new Triple(-radius * Math.Cos(-theta), radius * Math.Sin(-theta), cam_z), 0, 0, nx, ny, 0.9); c.AzimuthAngle = theta; Background basic = new Background(); GlobalLightSource light = new GlobalLightSource(new Triple(1, 2, -4)); Scene main_scene = new Scene(basic, c); main_scene.DoShadows = true; Info.WriteLine("Importing..."); Stl stl_subject = new Stl("stl/liberty.stl"); Info.WriteLine("Done importing."); FacetBody subject = stl_subject.ToFacetBody(new Triple(0, 0, 250)); RectangularPrism floor = new RectangularPrism(new Triple(0, 0, subject.ZminGlobal - 0.15), 190, 190, 0.3); c.Position.Z = subject.ZminGlobal; c.ElevationAngle = 0.78 * Math.PI / 3; subject.BodyOpticalProperties.BaseColor = new Triple(0.8, 0.5, 0.8); subject.BodyOpticalProperties.IsReflective = true; subject.BodyOpticalProperties.Reflectivity = 0.21; //main_scene.AddBody(floor); main_scene.AddBody(subject); main_scene.AddLight(light); double[,] dist, ts; int[,] id; Info.WriteLine("Rendering..."); RayImage picture = main_scene.Render(out dist, out id, out ts); RayImage dist_picture = RayImage.ArrayLogRangeXY(dist, ColorGradient.Jedi()); RayImage t_picture = RayImage.ArrayLogRangeXY(ts, ColorGradient.Jedi()); Info.WriteLine("Done."); picture.Save("frames/lib.png"); dist_picture.Save("frames/libdists.png"); t_picture.Save("frames/libtimes.png"); Utils.WriteCsv("frames/dists.csv", dist); Utils.WriteCsv("frames/times.csv", ts); }
public static void DestroyComputer() { int nx = 1950; int ny = 1000; double radius = 25; double cam_z = 26; double theta = 0.5 * Math.PI; Camera c = new Camera(new Triple(-radius * Math.Cos(-theta), radius * Math.Sin(-theta), cam_z), 0, 0, nx, ny, 0.9); c.AzimuthAngle = theta; Background basic = new Background(); basic.HasFloor = false; basic.SkyColor = new Triple(1, 1, 1); GlobalLightSource light = new GlobalLightSource(new Triple(1, 2, -4)); Scene main_scene = new Scene(basic, c); main_scene.DoShadows = true; Info.WriteLine("Importing..."); Stl stl_subject = new Stl("stl/car-a.stl", true); Info.WriteLine("Done importing."); FacetBody subject = stl_subject.ToFacetBody(new Triple(0, 0, 25)); RectangularPrism floor = new RectangularPrism(new Triple(0, 0, subject.ZminGlobal - 0.15), 190, 190, 0.3); subject.BodyOpticalProperties.BaseColor = new Triple(0.5, 0.5, 0.5); subject.BodyOpticalProperties.IsReflective = false; subject.BodyOpticalProperties.Reflectivity = 0.21; //main_scene.AddBody(floor); main_scene.AddBody(subject); main_scene.AddLight(light); double[,] dist, ts; int[,] id; Info.WriteLine("Rendering..."); RayImage picture = main_scene.Render(out dist, out id, out ts); RayImage dist_picture = RayImage.ArrayLogRangeXY(dist, ColorGradient.Jedi()); RayImage t_picture = RayImage.ArrayLogRangeXY(ts, ColorGradient.Jedi()); Info.WriteLine("Done."); picture.Save("cfdstuff/car.png"); dist_picture.Save("cfdstuff/cardists.png"); t_picture.Save("cfdstuff/cartimes.png"); }
public static double[] RenderTeapot() { int nx = 1320; int ny = 768; int N = 1; double dtheta = 2 * Math.PI / N; Triple cube_pos = new Triple(0, 0, 12); Background basic = new Background(); basic.HasFloor = true; double radius = 25; double elev = -0.15; double height = 15; //rdr times List <double> times = new List <double>(); GlobalLightSource light = new GlobalLightSource(new Triple(1, 2, -4)); Triple pos = new Triple(0, 0, height); Camera c = new Camera(pos, elev, 0, nx, ny, 0.9); Sphere ball = new Sphere(cube_pos, 3); Stl teapot_stl = new Stl("stl/frog.stl"); FacetBody teapot = teapot_stl.ToFacetBody(cube_pos + new Triple(5, 1.5, 0)); teapot.WriteAsciiStl("stl/TESTING.stl"); RectangularPrism floor = new RectangularPrism(new Triple(0, 0, 0), 70, 70, teapot.ZminGlobal * 2); RectangularPrism eq = new RectangularPrism(cube_pos, 10, 10, 10); ball.BodyOpticalProperties.BaseColor = new Triple(0.7, 0.2, 0.2); eq.BodyOpticalProperties.BaseColor = new Triple(0.7, 0.2, 0.2); teapot.BodyOpticalProperties.BaseColor = new Triple(0.7, 0.2, 0.2); teapot.BodyOpticalProperties.IsReflective = true; teapot.BodyOpticalProperties.Reflectivity = 0.55; Scene main_scene = new Scene(basic, c); //main_scene.AddBody(ball); main_scene.AddBody(floor); main_scene.AddBody(teapot); //main_scene.AddBody(eq); main_scene.AddLight(light); Scene.PAR_RENDER = false; CustomStopWatch w = new CustomStopWatch(); for (int i = 0; i < N; i++) { double theta = i * dtheta; pos = new Triple(-radius * Math.Cos(-theta), radius * Math.Sin(-theta), height); // + 5*Math.Sin(theta)); ball.Move(new Triple(0, 0, -0.9)); //pos = new Triple(-radius, 0, height); main_scene.SceneCamera.AzimuthAngle = theta; //main_scene.SceneCamera.ElevationAngle = -0.19740*Math.Sin(theta); main_scene.SceneCamera.Position = pos; double[,] dist, times_d; int[,] id; w.tic(); RayImage r = main_scene.Render(out dist, out id, out times_d); times.Add(w.toc()); w.Report("render " + i.ToString()); r.Save("frames/img" + (i).ToString().PadLeft(3, '0') + ".png"); Utils.WriteCsv("outputdata/ids.csv", id); Utils.WriteCsv("outputdata/dists.csv", dist); Utils.WriteCsv("outputdata/pxtimes.csv", times_d); } return(times.ToArray()); }