package main import ( "os" "runtime/pprof" ) func main() { f, _ := os.Create("rtiaw.prof"); pprof.StartCPUProfile(f); defer pprof.StopCPUProfile(); var world Hittables; mat_ground := Lambertian{Vec3{0.5, 0.5, 0.5}}; world.Add(Sphere{Vec3{0, -1000, 0}, 1000, mat_ground}); i := Interval{0, 1}; for a := -11; a < 11; a++ { for b := -11; b < 11; b++ { choose_mat := i.Sample(); centre := Vec3{float64(a) + 0.9 * i.Sample(), 0.2, float64(b) + 0.9 * i.Sample()}; if centre.Sub(Vec3{4, 0.2, 0}).Mag() > 0.9 { if (choose_mat < 0.8) { // diffuse albedo := Vec3{i.Sample(), i.Sample(), i.Sample()}. Mul(Vec3{i.Sample(), i.Sample(), i.Sample()}); mat_sphere := Lambertian{albedo}; world.Add(Sphere{centre, 0.2, mat_sphere}); } else if (choose_mat < 0.95) { // metal j := Interval{0.5, 1}; albedo := Vec3{j.Sample(), j.Sample(), j.Sample()}; fuzz := j.Sample() - 0.5; mat_sphere := Metal{albedo, fuzz}; world.Add(Sphere{centre, 0.2, mat_sphere}); } else { // glass mat_sphere := Dielectric{1.5}; world.Add(Sphere{centre, 0.2, mat_sphere}); } } } } mat1 := Dielectric{1.5}; world.Add(Sphere{Vec3{0, 1, 0}, 1.0, mat1}); mat2 := Lambertian{Vec3{0.4, 0.2, 0.1}}; world.Add(Sphere{Vec3{-4, 1, 0}, 1.0, mat2}); mat3 := Metal{Vec3{0.7, 0.6, 0.5}, 0.0}; world.Add(Sphere{Vec3{4, 1, 0}, 1.0, mat3}); cam := NewCamera(1200, 16.0/9.0, 500, 50, 20, Vec3{13, 2, 3}, Vec3{0, 0, 0}, Vec3{0, 1, 0}, 0.6, 10.0); cam.Render(world); }