public SolidObject(BaseMaterial material, TriangleMeshInfo mesh) : base(mesh) { if (mesh == null) { throw new ArgumentNullException("mesh"); } this.Material = (SolidMaterial)material; }
public void Build() { int id = 0; Tracer.TraceLine("Spectral-#- Start scene building-"); Tracer.TraceLine("Spectral-##- Materials-"); foreach (var material in Scene.MaterialProvider.GetAll()) { if (!solidMaterials.ContainsKey(material.MaterialName.ToLower())) { var mat = new SolidMaterial(id++, material, Scene, BrdfFactory.Instance.CreateBrdf(material)); solidMaterials.Add(material.MaterialName.ToLower(), mat); } } lightMaterials.Add("D6500", new LightMaterial(SPD_Data.FromSampled(SPD_Data.D6500, SpectrumType.Illuminant))); lightMaterials.Add("D5000", new LightMaterial(SPD_Data.FromSampled(SPD_Data.D5000, SpectrumType.Illuminant))); lightMaterials.Add("A", new LightMaterial(SPD_Data.FromSampled(SPD_Data.A, SpectrumType.Illuminant))); Tracer.TraceLine("Spectral-##- Solids-"); int objects = 0, lights = 0; foreach (var triangleMesh in Scene.Meshes.Cast<TriangleMeshInfo>()) { var solid = new SolidObject(solidMaterials[triangleMesh.MaterialName.ToLower()], triangleMesh) { IsLightsource = IsLight(triangleMesh.MeshName), ID = objects+1 }; this.Objects[objects++] = solid; } Tracer.TraceLine("Spectral-##- Lights-"); foreach (var lt in Scene.Lights) { BaseLight light = null; int solidId = 0; LightMaterial lightMat = lightMaterials.ContainsKey(lt.Profile.Name.ToUpper()) ? lightMaterials[lt.Profile.Name.ToUpper()] : lightMaterials[DefaultLightProfile]; if (lt is RayDen.RayEngine.Data.PointLight) { var l = lt as RayDen.RayEngine.Data.PointLight; light = new RayEngine.Spectral.Entities.Lighting.PointLight(lightMat, l.Position); } else if (lt is InfiniteLight) { var l = lt as InfiniteLight; light = new BasicInfiniteLight(l.Sampler, lightMat); } else if (lt is RayDen.RayEngine.Data.MeshLight) { var l = lt as RayDen.RayEngine.Data.MeshLight; light = new TriangleMeshLight(lightMat, Scene, (TriangleMeshInfo)Scene.Meshes.First(mesh => mesh.MeshName.ToLower().Equals(l.MeshName.ToLower()))); var prim = this.Objects.FirstOrDefault( mesh => mesh.Mesh.MeshName.Equals(l.MeshName, StringComparison.InvariantCultureIgnoreCase)); if (prim != null) { prim.ChildID = lights; solidId = Array.IndexOf(this.Objects, prim); } } if (light != null) this.Lights[lights++] = new LightsourceObject(lightMat, light) { ID = lights, SolidId = solidId }; } Tracer.TraceLine("Spectral-#- Complete scene building-"); }