void build10() { int ns = 49; world.ViewPlane.HRes = 800; world.ViewPlane.VRes = 700; world.ViewPlane.SetSampler(new Regular(ns)); world.ViewPlane.MaxDepth = 10; world.Tracer = new Whitted(world); AmbientOccluder occ = new AmbientOccluder(); occ.RadianceScale = 1.0f; occ.MinAmount = 0f; occ.Shadows = true; occ.Color = Vector3.One; occ.SetSampler(new MultiJittered(ns)); world.AmbientLight = occ; Pinhole cam = new Pinhole(); cam.Position = new Vector3(40, 30, 20); cam.Target = new Vector3(0, 0, 0); cam.Distance = 5000; cam.Zoom = 1.5f; world.Camera = cam; Sphere ss = new Sphere(new Vector3(2f, 0.5f, 1f), 0.5f); ss.Shadows = true; ss.SetMaterial(new Matte(0.25f, 0.5f, new Vector3(1f, 1f, 1f)) { Shadows = true }); world.Objects.Add(ss); Matte matte = new Matte(0.25f, 0.5f, new Vector3(0.5f, 0, 0.5f)); matte.Shadows = true; Box s = new Box(new Vector3(0, 0, 1), new Vector3(1, 1, 2)); s.Shadows = true; s.SetMaterial(matte); world.Objects.Add(s); Matte m2 = new Matte(0.25f, 0, new Vector3(1, 1, 0)); m2.Shadows = true; Box b2 = new Box(new Vector3(1, 1, 0), new Vector3(2, 2, 1)); b2.SetMaterial(m2); b2.Shadows = true; //world.Objects.Add(b2); Matte matte2 = new Matte(0.75f, 0.5f, new Vector3(1, 1, 1)); matte2.Shadows = true; Plane p = new Plane(Vector3.Zero, new Vector3(0, 1, 0)); p.Shadows = true; p.SetMaterial(matte2); world.Objects.Add(p); Matte m5 = new Matte(0.75f, 0.1f, new Vector3(0, 0.5f, 1)); m5.Shadows = true; Annulus an = new Annulus(new Vector3(1, 1.2f, 0), Vector3.Up, 0.4f, 0.2f); an.SetMaterial(m5); an.Shadows = true; world.Objects.Add(an); Matte m6 = new Matte(0.75f, 0.1f, new Vector3(1, 0, 0.4f)); m6.Shadows = true; SolidCylinder sc = new SolidCylinder(0, 1, 0.5f); sc.Shadows = true; sc.SetMaterial(m6); world.Objects.Add(sc); PointLight pl = new PointLight(); pl.Color = Vector3.One; pl.Position = new Vector3(4, 4, 0); pl.RadianceScale = 1.0f; pl.Shadows = true; world.Lights.Add(pl); float exp = 2000; Transparent sphere_material = new Transparent(); sphere_material.SetSpecularRC(0.5f); sphere_material.SetExp(exp); sphere_material.SetIndexOfRefraction(1.5f); sphere_material.SetReflectiveRC(0.1f); sphere_material.SetTransmissionCoefficient(0.9f); Sphere sph = new Sphere(new Vector3(2f, 0.5f, 0f), 0.5f); sph.SetMaterial(sphere_material); world.Objects.Add(sph); Reflective smatte2 = new Reflective(); smatte2.SetAmbientRC(0.25f); smatte2.SetDiffuseRC(0.5f); smatte2.SetRColor(new Vector3(1)); smatte2.SetSpecularRC(0.15f); smatte2.SetExp(100); smatte2.SetReflectiveRC(0.75f); smatte2.SetCD(new Vector3(1)); Sphere sphere = new Sphere(new Vector3(0, 2, 0), 0.4f); sphere.SetMaterial(smatte2); world.Objects.Add(sphere); }
void build8() { int ns = 256; world.ViewPlane.HRes = 400; world.ViewPlane.VRes = 400; world.ViewPlane.MaxDepth = 1; world.ViewPlane.SetSamples(ns); world.Tracer = new Whitted(world); AmbientOccluder occ = new AmbientOccluder(); occ.RadianceScale = 1.0f; occ.MinAmount = 0f; occ.Shadows = true; occ.Color = Vector3.One; occ.SetSampler(new MultiJittered(ns)); world.AmbientLight = occ; Pinhole cam = new Pinhole(); cam.Position = new Vector3(40, 30, 20); cam.Target = new Vector3(0, 0, 0); cam.Distance = 5000; cam.Zoom = 1; world.Camera = cam; Reflective matte2 = new Reflective(); matte2.SetAmbientRC(0.001f); matte2.SetDiffuseRC(0.5f); matte2.SetRColor(new Vector3(1)); matte2.SetSpecularRC(0); matte2.SetExp(100); matte2.SetReflectiveRC(0.5f); matte2.SetCD(new Vector3(1)); Sphere ss = new Sphere(new Vector3(2f, 0.5f, 1f), 0.5f); ss.Shadows = true; ss.SetMaterial(matte2); world.Objects.Add(ss); Matte matte = new Matte(0.25f, 0.5f, new Vector3(0.5f, 0, 0.5f)); matte.Shadows = true; Box s = new Box(new Vector3(0, 0, 1), new Vector3(1, 1, 2)); s.Shadows = true; s.SetMaterial(matte); world.Objects.Add(s); Matte m2 = new Matte(0.25f, 0, new Vector3(1, 1, 0)); m2.Shadows = true; Box b2 = new Box(new Vector3(1, 1, 0), new Vector3(2, 2, 1)); b2.SetMaterial(m2); b2.Shadows = true; //world.Objects.Add(b2); Plane p = new Plane(Vector3.Zero, new Vector3(0, 1, 0)); p.Shadows = true; p.SetMaterial(new Matte(0.25f, 0.5f, new Vector3(1f, 1f, 1f)) { Shadows = true }); world.Objects.Add(p); Matte m3 = new Matte(1, 1, Vector3.One); m3.Shadows = true; Disk d = new Disk(new Vector3(0f, 1.6f, 1), new Vector3(1, 1, 1), 0.5f); d.SetMaterial(m3); d.Shadows = true; world.Objects.Add(d); Matte m5 = new Matte(0.75f, 0.1f, new Vector3(0, 0.5f, 1)); m5.Shadows = true; Annulus an = new Annulus(new Vector3(1, 1.2f, 0), Vector3.Up, 0.4f, 0.2f); an.SetMaterial(m5); an.Shadows = true; world.Objects.Add(an); Matte m6 = new Matte(0.75f, 0.1f, new Vector3(1, 0, 0.4f)); m6.Shadows = true; SolidCylinder sc = new SolidCylinder(0, 1, 0.5f); sc.Shadows = true; sc.SetMaterial(m6); world.Objects.Add(sc); PointLight pl = new PointLight(); pl.Color = Vector3.One; pl.Position = new Vector3(0, 4, 0); pl.RadianceScale = 1.0f; pl.Shadows = true; world.Lights.Add(pl); }
public static GeometricObject CreateObjectFromElement(this RElement ele, Dictionary<string, Texture> txts, ref bool instance) { string n = ele.Name; string name = getName(ele); bool shad = getShadow(ele); instance = !getInstance(ele); Material m = getMaterial(ele, txts); if (n == P.Obj.Sph) { Sphere sph = new Sphere(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Rad].ToFloat(), name); sph.SetShadows(shad); sph.SetMaterial(m); return sph; } else if (n == P.Obj.Box) { Box box = new Box(ele.Attributes[P.Min].ToVector3(), ele.Attributes[P.Max].ToVector3(), name); box.SetShadows(shad); box.SetMaterial(m); return box; } else if (n == P.Obj.Plane) { Plane p = new Plane(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Dir].ToVector3(), name); p.SetShadows(shad); p.SetMaterial(m); return p; } else if (n == P.Obj.Disk) { Disk d = new Disk(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Dir].ToVector3(), ele.Attributes[P.Rad].ToFloat(), name); d.SetShadows(shad); d.SetMaterial(m); return d; } else if (n == P.Obj.Annulus) { Annulus d = new Annulus(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Dir].ToVector3(), float.Parse(ele.Attributes[P.IRad].Value), float.Parse(ele.Attributes[P.ORad].Value), name); d.SetShadows(shad); d.SetMaterial(m); return d; } else if (n == P.Obj.Tri) { Triangle t = new Triangle(ele.Attributes["P1"].ToVector3(), ele.Attributes["P2"].ToVector3(), ele.Attributes["P3"].ToVector3(), name); t.SetShadows(shad); t.SetMaterial(m); return t; } else if (n == P.Obj.STri) { SmoothTriangle t = new SmoothTriangle(ele.Attributes["P1"].ToVector3(), ele.Attributes["P2"].ToVector3(), ele.Attributes["P3"].ToVector3(), name); t.SetShadows(shad); t.SetMaterial(m); return t; } else if (n == P.Obj.Rect) { Rectangle r = new Rectangle(ele.Attributes["P"].ToVector3(), GetVector(ele.Attributes["A"]), GetVector(ele.Attributes["B"]), name); r.SetShadows(shad); r.SetMaterial(m); return r; } else if (n == P.Obj.OCyl) { OpenCylinder oc = new OpenCylinder(float.Parse(ele.Attributes[P.Bottom].Value), float.Parse(ele.Attributes[P.Top].Value), float.Parse(ele.Attributes[P.Rad].Value), name); oc.SetShadows(shad); oc.SetMaterial(m); return oc; } else if (n == P.Obj.Cyl) { SolidCylinder oc = new SolidCylinder(float.Parse(ele.Attributes[P.Bottom].Value), float.Parse(ele.Attributes[P.Top].Value), float.Parse(ele.Attributes[P.Rad].Value), name); oc.SetShadows(shad); oc.SetMaterial(m); return oc; } else if (n == P.Obj.OC) { OpenCone oc = new OpenCone(float.Parse(ele.Attributes[P.Rad].Value), float.Parse(ele.Attributes[P.Height].Value), name); oc.SetShadows(shad); oc.SetMaterial(m); return oc; } else if (n == P.Obj.COCyl) { ConvexOpenCylinder oc = new ConvexOpenCylinder(float.Parse(ele.Attributes[P.Bottom].Value), float.Parse(ele.Attributes[P.Top].Value), float.Parse(ele.Attributes[P.Rad].Value), name); oc.SetShadows(shad); oc.SetMaterial(m); return oc; } else if (n == P.Obj.Ins) { Instance ins = new Instance(GeometricObject.GetObject(ele.Attributes["ObjectRef"].Value), name); ins.SetShadows(shad); transform(ins, ele); if (m != null) ins.SetMaterial(m); return ins; } else if (n == P.Obj.Tor) { Torus tor = new Torus(ele.Attributes[P.Srad].ToFloat(), ele.Attributes[P.Trad].ToFloat(), name); tor.SetShadows(shad); if (m != null) tor.SetMaterial(m); return tor; } else if (n == P.Obj.ConSph) { ConcaveSphere conc = new ConcaveSphere(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Rad].ToFloat(), name); conc.SetShadows(shad); if (m != null) conc.SetMaterial(m); return conc; } else if (n == P.Obj.ConHsph) { ConcaveHemisphere conc = new ConcaveHemisphere(ele.Attributes[P.Pos].ToVector3(), ele.Attributes[P.Rad].ToFloat(), name); conc.SetShadows(shad); if (m != null) conc.SetMaterial(m); return conc; } else if (n == P.Obj.Mesh) { Mesh mesh = new Mesh(name); mesh.SetShadows(shad); getVertices(mesh, ele); getNormals(mesh, ele); getFaces(mesh, ele); if (m != null) mesh.SetMaterial(m); return mesh; } else { return getCObject(ele); } }
void build6() { try { int ns = 121; world.ViewPlane.HRes = 400; world.ViewPlane.VRes = 400; world.ViewPlane.SetSamples(ns); world.Tracer = new AreaLighting(world); AmbientOccluder occ = new AmbientOccluder(); occ.RadianceScale = 1.0f; occ.MinAmount = 0f; occ.Shadows = true; occ.Color = Vector3.One; occ.SetSampler(new MultiJittered(ns)); world.AmbientLight = occ; Pinhole cam = new Pinhole(); cam.Position = new Vector3(40, 30, 20); cam.Target = new Vector3(0, 0, 0); cam.Distance = 5000; cam.Zoom = 1; world.Camera = cam; Sphere ss = new Sphere(new Vector3(2f, 0.5f, 1f), 0.5f); ss.Shadows = true; ss.SetMaterial(new Matte(0.25f, 0.5f, new Vector3(1f, 1f, 1f)) { Shadows = true }); world.Objects.Add(ss); Matte matte = new Matte(0.25f, 0.5f, new Vector3(0.5f, 0, 0.5f)); matte.Shadows = true; Box s = new Box(new Vector3(0, 0, 1), new Vector3(1, 1, 2)); s.Shadows = true; s.SetMaterial(matte); world.Objects.Add(s); Matte m2 = new Matte(0.25f, 0, new Vector3(1, 1, 0)); m2.Shadows = true; Box b2 = new Box(new Vector3(1, 1, 0), new Vector3(2, 2, 1)); b2.SetMaterial(m2); b2.Shadows = true; //world.Objects.Add(b2); Matte matte2 = new Matte(0.75f, 0.5f, new Vector3(1, 1, 1)); matte2.Shadows = true; Plane p = new Plane(Vector3.Zero, new Vector3(0, 1, 0)); p.Shadows = true; p.SetMaterial(matte2); world.Objects.Add(p); Matte m3 = new Matte(0.25f, 0.5f, new Vector3(0.2f, 0.7f, 0.3f)); m3.Shadows = true; Disk d = new Disk(new Vector3(0f, 1.6f, 1), new Vector3(1), 0.5f); d.SetMaterial(m3); d.Shadows = true; world.Objects.Add(d); Matte m5 = new Matte(0.75f, 0.1f, new Vector3(0, 0.5f, 1)); m5.Shadows = true; Annulus an = new Annulus(new Vector3(1, 1.2f, 0), Vector3.Up, 0.4f, 0.2f); an.SetMaterial(m5); an.Shadows = true; world.Objects.Add(an); Matte m6 = new Matte(0.75f, 0.1f, new Vector3(1, 0, 0.4f)); m6.Shadows = true; Instance sc = new Instance(new SolidCylinder(0, 1, 0.5f)); sc.Shadows = true; sc.SetMaterial(m6); world.Objects.Add(sc); Matte mcone = new Matte(0.45f, 1, new Vector3(0.1f, 0, 0.4f)); Instance cone = new Instance(new SolidCone(0.5f, 1)); cone.Shadows = true; cone.SetMaterial(mcone); cone.Translate(new Vector3(0, 1.5f, -0.5f)); world.Objects.Add(cone); PointLight pl = new PointLight(); pl.Color = Vector3.One; pl.Position = new Vector3(0, 4, 0); pl.RadianceScale = 1.0f; pl.Shadows = true; world.Lights.Add(pl); } catch (Exception e) { MessageBox.Show(e.StackTrace); MessageBox.Show(e.TargetSite.ToString()); throw new Exception("yup"); } }
static GeometricObject getPObject(XElement ele, ref bool instance) { string typ = ele.Name.LocalName; if (ele.Attribute("Instance") != null) instance = bool.Parse(getAttribute("Instance", ele)); else instance = false; if (typ == "Sphere") { Sphere sph = new Sphere(getVector(getAttribute("Position", ele)), float.Parse(getAttribute("Radius", ele)), getAttribute("Name", ele)); sph.SetShadows(bool.Parse(getAttribute("Shadows", ele))); sph.SetMaterial(getMaterial(ele)); return sph; } else if (typ == "Box") { Box b = new Box(getVector(getAttribute("Min", ele)), getVector(getAttribute("Max", ele)), getAttribute("Name", ele)); b.SetShadows(bool.Parse(getAttribute("Shadows", ele))); b.SetMaterial(getMaterial(ele)); return b; } else if (typ == "Plane") { Plane p = new Plane(getVector(getAttribute("Position", ele)), getVector(getAttribute("Direction", ele)), getAttribute("Name", ele)); p.SetShadows(bool.Parse(getAttribute("Shadows", ele))); p.SetMaterial(getMaterial(ele)); return p; } else if (typ == "Disk") { Disk d = new Disk(getVector(getAttribute("Center", ele)), getVector(getAttribute("Direction", ele)), float.Parse(getAttribute("Radius", ele)), getAttribute("Name", ele)); d.SetShadows(bool.Parse(getAttribute("Shadows", ele))); d.SetMaterial(getMaterial(ele)); return d; } else if (typ == "Annulus") { Annulus d = new Annulus(getVector(getAttribute("Center", ele)), getVector(getAttribute("Direction", ele)), float.Parse(getAttribute("InnerRadius", ele)), float.Parse(getAttribute("OuterRadius", ele)), getAttribute("Name", ele)); d.SetShadows(bool.Parse(getAttribute("Shadows", ele))); d.SetMaterial(getMaterial(ele)); return d; } else if (typ == "Triangle") { Triangle t = new Triangle(getVector(getAttribute("P1", ele)), getVector(getAttribute("P2", ele)), getVector(getAttribute("P3", ele)), getAttribute("Name", ele)); t.SetShadows(bool.Parse(getAttribute("Shadows", ele))); t.SetMaterial(getMaterial(ele)); return t; } else if (typ == "SmoothTriangle") { SmoothTriangle t = new SmoothTriangle(getVector(getAttribute("P1", ele)), getVector(getAttribute("P2", ele)), getVector(getAttribute("P3", ele)), getAttribute("Name", ele)); t.SetShadows(bool.Parse(getAttribute("Shadows", ele))); t.SetMaterial(getMaterial(ele)); return t; } else if (typ == "Rectangle") { Rectangle r = new Rectangle(getVector(getAttribute("P", ele)), getVector(getAttribute("A", ele)), getVector(getAttribute("B", ele)), getAttribute("Name", ele)); r.SetShadows(bool.Parse(getAttribute("Shadows", ele))); r.SetMaterial(getMaterial(ele)); return r; } else if (typ == "OpenCylinder") { OpenCylinder oc = new OpenCylinder(float.Parse(getAttribute("Bottom", ele)), float.Parse(getAttribute("Top", ele)), float.Parse(getAttribute("Radius", ele)), getAttribute("Name", ele)); oc.SetShadows(bool.Parse(getAttribute("Shadows", ele))); oc.SetMaterial(getMaterial(ele)); return oc; } else if (typ == "OpenCone") { OpenCone oc = new OpenCone(float.Parse(getAttribute("Radius", ele)), float.Parse(getAttribute("Height", ele)), getAttribute("Name", ele)); oc.SetShadows(bool.Parse(getAttribute("Shadows", ele))); oc.SetMaterial(getMaterial(ele)); return oc; } else if (typ == "ConvexOpenCylinder") { ConvexOpenCylinder oc = new ConvexOpenCylinder(float.Parse(getAttribute("Bottom", ele)), float.Parse(getAttribute("Top", ele)), float.Parse(getAttribute("Radius", ele)), getAttribute("Name", ele)); oc.SetShadows(bool.Parse(getAttribute("Shadows", ele))); oc.SetMaterial(getMaterial(ele)); return oc; } else if (typ == "Instance") { Instance ins = new Instance(GeometricObject.GetObject(getAttribute("ObjectRef", ele)), getAttribute("Name", ele)); ins.SetShadows(bool.Parse(getAttribute("Shadows", ele))); return ins; } else { return getCObject(ele); } }