void build11() { int ns = 100; world.ViewPlane.HRes = 600; world.ViewPlane.VRes = 600; 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 Regular(ns)); world.AmbientLight = occ; Pinhole cam = new Pinhole(); cam.Position = new Vector3(-6, 6, 45); cam.Target = new Vector3(0, 0, 0); cam.Distance = 5000; cam.Zoom = 1.7f; world.Camera = cam; Matte plane_material = new Matte(0.9f, 0.9f, Vector3.One); XRectangle pl = new XRectangle(new Vector3(-2.5f, 0, -2.5f), new Vector3(0, 0, 5), new Vector3(5, 0, 0), Vector3.Up); //Plane pl = new Plane(new Vector3(0), Vector3.Up); pl.SetMaterial(plane_material); world.Objects.Add(pl); PointLight light = new PointLight(); light.Color = Vector3.One; light.Position = new Vector3(-3, 3, 0); light.RadianceScale = 2.0f; float refl = 0.18f; float spec = 0.8f; float amb = 0.5f; float diff = 1f; float exp = 100; Group tree = new Group(); world.Lights.Add(light); { ImageTexture im = new ImageTexture(); Disque.Raytracer.Textures.Image imm = Extensions.CreateFromBitmap(@"C:\Users\Belal\Downloads\Earth_Diffuse_2.jpg"); im.SetImage(imm); im.SetMapping(new SphericalMap()); SV_Phong sphere_m = new SV_Phong(); sphere_m.SetCD(im); sphere_m.SetSpecularColor(im); sphere_m.SetExp(40); sphere_m.SetSpecularRC(0.2f); sphere_m.SetDiffuseRC(0.6f); sphere_m.SetAmbientRC(0.25f); Sphere sphere = new Sphere(new Vector3(0, 0f, 0), 1f); Instance ins = new Instance(sphere); ins.SetMaterial(sphere_m); ins.RotateY(MathHelper.ToRadians(90)); ins.Scale(new Vector3(0.4f)); ins.Translate(new Vector3(0, 0.4f, 0.5f)); world.Objects.Add(ins); } { Reflective smatte2 = new Reflective(); smatte2.SetAmbientRC(amb); smatte2.SetDiffuseRC(diff); smatte2.SetCD(new Vector3(1, 0.77f, 0.77f)); smatte2.SetRColor(new Vector3(1, 0.77f, 0.77f)); smatte2.SetSpecularRC(spec); smatte2.SetExp(exp); smatte2.SetReflectiveRC(refl); Sphere s = new Sphere(new Vector3(-0.8f, 0.45f, 0.1f), 0.45f); s.SetMaterial(smatte2); tree.AddObject(s); //world.Objects.Add(s); } { Reflective smatte2 = new Reflective(); smatte2.SetAmbientRC(amb); smatte2.SetDiffuseRC(diff); smatte2.SetCD(new Vector3(0.92f, 0.74f, 1)); smatte2.SetRColor(new Vector3(0.92f, 0.74f, 1)); smatte2.SetSpecularRC(spec); smatte2.SetExp(exp); smatte2.SetReflectiveRC(refl); Sphere s = new Sphere(new Vector3(0.7f, 0.4f, 1.5f), 0.4f); s.SetMaterial(smatte2); tree.AddObject(s); //world.Objects.Add(s); } { Reflective smatte2 = new Reflective(); smatte2.SetAmbientRC(amb); smatte2.SetDiffuseRC(diff); smatte2.SetCD(new Vector3(0.62f, 0f, 0.7f)); smatte2.SetRColor(new Vector3(0.62f, 0f, 0.7f)); smatte2.SetSpecularRC(spec); smatte2.SetExp(exp); smatte2.SetReflectiveRC(refl); Sphere s = new Sphere(new Vector3(-0.7f, 0.2f, 1.5f), 0.2f); s.SetMaterial(smatte2); tree.AddObject(s); //world.Objects.Add(s); } world.Objects.Add(tree); }
public static Material CreateMaterialFromElement(this RElement ele, Dictionary<string, Texture> textures) { string n = ele.Name; bool shad = getShadow(ele); Sampler s = null; if (ele.Attributes.ContainsKey(P.Sampler)) { s = ele.Attributes[P.Sampler].CreateSamplerFromAttribute(ele.Attributes[P.Samples].ToInt()); } if (n == P.Mate.Matt) { Matte m = new Matte(ele.Attributes[P.AmbRefCoeff].ToFloat(), ele.Attributes[P.DiffRefCoeff].ToFloat(), ele.Attributes[P.Col].ToVector3()); m.Shadows = shad; if (s != null) m.SetSampler(s); return m; } else if (n == P.Mate.Pho) { Phong p = new Phong(); p.SetSpecularColor(ele.Attributes[P.SpCol].ToVector3()); p.SetExp(ele.Attributes[P.Exp].ToFloat()); p.SetCD(GetVector(ele.Attributes[P.Col])); p.SetAmbientRC(ele.Attributes[P.AmbRefCoeff].ToFloat()); p.SetDiffuseRC(ele.Attributes[P.DiffRefCoeff].ToFloat()); p.SetSpecularRC(ele.Attributes[P.SpecCoeff].ToFloat()); p.Shadows = shad; if (s != null) p.SetSampler(s); return p; } else if (n == P.Mate.Refl) { Reflective r = new Reflective(); r.SetSpecularColor(ele.Attributes[P.SpCol].ToVector3()); r.SetSpecularRC(ele.Attributes[P.SpecCoeff].ToFloat()); r.SetRColor(GetVector(ele.Attributes[P.RefCol])); r.SetReflectiveRC(ele.Attributes[P.RefCoeff].ToFloat()); r.SetExp(ele.Attributes[P.Exp].ToFloat()); r.SetCD(GetVector(ele.Attributes[P.Col])); r.SetAmbientRC(ele.Attributes[P.AmbRefCoeff].ToFloat()); r.SetDiffuseRC(ele.Attributes[P.DiffRefCoeff].ToFloat()); r.Shadows = shad; if (s != null) r.SetSampler(s); return r; } else if (n == P.Mate.Trans) { Transparent t = new Transparent(); t.SetSpecularColor(ele.Attributes[P.SpCol].ToVector3()); t.SetSpecularRC(ele.Attributes[P.SpecCoeff].ToFloat()); t.SetReflectiveRC(ele.Attributes[P.RefCoeff].ToFloat()); t.SetExp(ele.Attributes[P.Exp].ToFloat()); t.SetCD(GetVector(ele.Attributes[P.Col])); t.SetAmbientRC(ele.Attributes[P.AmbRefCoeff].ToFloat()); t.SetDiffuseRC(ele.Attributes[P.DiffRefCoeff].ToFloat()); t.SetIndexOfRefraction(ele.Attributes[P.IOR].ToFloat()); t.SetTransmissionCoefficient(ele.Attributes[P.TransCoeff].ToFloat()); t.Shadows = shad; if (s != null) t.SetSampler(s); return t; } else if (n == P.Mate.GlosRef) { GlossyReflective p = new GlossyReflective(); p.SetSpecularColor(ele.Attributes[P.SpCol].ToVector3()); p.SetSpecularRC(ele.Attributes[P.SpecCoeff].ToFloat()); p.SetExp(ele.Attributes[P.Exp].ToFloat()); p.SetCD(ele.Attributes[P.Col].ToVector3()); p.SetAmbientRC(ele.Attributes[P.AmbRefCoeff].ToFloat()); p.SetDiffuseRC(ele.Attributes[P.DiffRefCoeff].ToFloat()); p.SetCR(ele.Attributes[P.GlosCol].ToVector3()); p.SetKR(ele.Attributes[P.GlosCoeff].ToFloat()); p.Shadows = shad; if (s != null) p.SetSampler(s); return p; } else if (n == P.Mate.Emis) { Emissive em = new Emissive(); em.Color = ele.Attributes[P.Col].ToVector3(); em.Radiance = ele.Attributes[P.Radi].ToFloat(); em.Shadows = shad; if (s != null) em.SetSampler(s); return em; } else if (n == (P.Text + P.Mate.Matt)) { SV_Matte p = new SV_Matte(ele.Attributes[P.AmbRefCoeff].ToFloat(), ele.Attributes[P.DiffRefCoeff].ToFloat(), textures[ele.Attributes[P.Text].Value]) { Shadows = shad }; if (s != null) p.SetSampler(s); return p; } else if (n == (P.Text + P.Mate.Pho)) { SV_Phong p = new SV_Phong(); p.SetSpecularColor(textures[ele.Attributes[P.SpTxt].Value]); p.SetExp(ele.Attributes[P.Exp].ToFloat()); p.SetCD(textures[ele.Attributes[P.Text].Value]); p.SetAmbientRC(ele.Attributes[P.AmbRefCoeff].ToFloat()); p.SetDiffuseRC(ele.Attributes[P.DiffRefCoeff].ToFloat()); p.Shadows = shad; if (s != null) p.SetSampler(s); return p; } throw new Exception(); //Create an exception for not found elements; }
void build13() { int ns = 9; world.ViewPlane.HRes = 400; world.ViewPlane.VRes = 400; world.ViewPlane.SetSampler(new MultiJittered(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(0, 20, -60); cam.Target = new Vector3(0, 7.5f, 0); cam.Distance = 200; cam.Zoom = 3.5f; world.Camera = cam; float refl = 0.8f; float spec = 0.2f; float amb = 0.2f; float diff = 0.2f; float exp = 100; Plane p = new Plane(Vector3.Zero, new Vector3(0, 1, 0)); p.Shadows = true; p.SetMaterial(new Matte(0.75f, 0.75f, new Vector3(0.56, 0.45, 0.32))); world.Objects.Add(p); ImageTexture im = new ImageTexture(); Disque.Raytracer.Textures.Image imm = Extensions.CreateFromBitmap(@"C:\Users\Belal\Downloads\Earth_Diffuse_2.jpg"); im.SetImage(imm); im.SetMapping(new SphericalMap()); SV_Phong sphere_m = new SV_Phong(); sphere_m.SetCD(im); sphere_m.SetSpecularColor(new ConstantColor(Vector3.One)); sphere_m.SetExp(1); sphere_m.SetSpecularRC(1f); sphere_m.SetDiffuseRC(1f); sphere_m.SetAmbientRC(1f); Sphere sphere = new Sphere(new Vector3(0, 0f, 0), 1f); ins = new Instance(sphere); ins.SetMaterial(sphere_m); ins.RotateY(45); ins.Scale(new Vector3(10)); ins.Translate(new Vector3(0, 13, 0)); Reflective smatte2 = new Reflective(); smatte2.SetAmbientRC(amb); smatte2.SetDiffuseRC(diff); smatte2.SetCD(new Vector3(1, 0, 0)); smatte2.SetRColor(new Vector3(1)); smatte2.SetSpecularRC(spec); smatte2.SetExp(exp); smatte2.SetReflectiveRC(refl); SolidCylinder sc = new SolidCylinder(0, 3, 13); sc.SetMaterial(new Matte(0.5f, 0.5f, new Vector3(0.5f, 0.5f, 0))); world.Objects.Add(sc); world.Objects.Add(ins); PointLight light = new PointLight(); light.Color = Vector3.One; light.Position = new Vector3(0, 40, -20); light.RadianceScale = 2f; world.Lights.Add(light); }
static Material getMaterial(XElement xele) { foreach (XElement ele in xele.Elements()) { string typ = ele.Name.LocalName; if (typ == "Matte") { return new Matte(float.Parse(getAttribute("ReflectionCoff", ele)), float.Parse(getAttribute("DiffuseCoff", ele)), getVector(getAttribute("Color", ele))) { Shadows = bool.Parse(getAttribute("Shadows", ele)) }; } else if (typ == "Phong") { Phong p = new Phong(); p.SetSpecularColor(getVector(getAttribute("SpecularColor", ele))); p.SetExp(float.Parse(getAttribute("Exponent", ele))); p.SetCD(getVector(getAttribute("Color", ele))); p.SetAmbientRC(float.Parse(getAttribute("AmbientRelfectionCoff", ele))); p.SetDiffuseRC(float.Parse(getAttribute("DiffuseRelfectionCoff", ele))); p.Shadows = bool.Parse(getAttribute("Shadows", ele)); return p; } else if (typ == "Reflective") { Reflective r = new Reflective(); r.SetSpecularColor(getVector(getAttribute("SpecularColor", ele))); r.SetSpecularRC(float.Parse(getAttribute("SpecularCoff", ele))); r.SetRColor(getVector(getAttribute("ReflectiveColor", ele))); r.SetReflectiveRC(float.Parse(getAttribute("ReflectiveCoff", ele))); r.SetExp(float.Parse(getAttribute("Exponent", ele))); r.SetCD(getVector(getAttribute("Color", ele))); r.SetAmbientRC(float.Parse(getAttribute("AmbientRelfectionCoff", ele))); r.SetDiffuseRC(float.Parse(getAttribute("DiffuseRelfectionCoff", ele))); r.Shadows = bool.Parse(getAttribute("Shadows", ele)); return r; } else if (typ == "Transparent") { Transparent t = new Transparent(); t.SetSpecularColor(getVector(getAttribute("SpecularColor", ele))); t.SetSpecularRC(float.Parse(getAttribute("SpecularCoff", ele))); t.SetReflectiveRC(float.Parse(getAttribute("ReflectiveCoff", ele))); t.SetExp(float.Parse(getAttribute("Exponent", ele))); t.SetCD(getVector(getAttribute("Color", ele))); t.SetAmbientRC(float.Parse(getAttribute("AmbientRelfectionCoff", ele))); t.SetDiffuseRC(float.Parse(getAttribute("DiffuseRelfectionCoff", ele))); t.SetIndexOfRefraction(float.Parse(getAttribute("IOR", ele))); t.SetTransmissionCoefficient(float.Parse(getAttribute("TransCoff", ele))); t.Shadows = bool.Parse(getAttribute("Shadows", ele)); return t; } else if (typ == "TextureMatte") { return new SV_Matte(float.Parse(getAttribute("ReflectionCoff", ele)), float.Parse(getAttribute("DiffuseCoff", ele)), textures[getAttribute("Texture", ele)]); } else if (typ == "TexturePhong") { SV_Phong p = new SV_Phong(); p.SetSpecularColor(textures[getAttribute("SpecularTexture", ele)]); p.SetExp(float.Parse(getAttribute("Exponent", ele))); p.SetCD(textures[getAttribute("Texture", ele)]); p.SetAmbientRC(float.Parse(getAttribute("AmbientRelfectionCoff", ele))); p.SetDiffuseRC(float.Parse(getAttribute("DiffuseRelfectionCoff", ele))); p.Shadows = bool.Parse(getAttribute("Shadows", ele)); return p; } break; } throw new ElementNotFound("Material"); }