public ElementBuilderFactory(EntityIdFactory entityIdFactory, IHitableSphereComputer hitableSphereComputer, IScatterableComputer scatterableComputer) { _entityIdFactory = entityIdFactory; _hitableSphereComputer = hitableSphereComputer; _scatterableComputer = scatterableComputer; }
private static Frame GenerateFrame() { var entityIdFactory = new EntityIdFactory(); var sceneBuilder = new SceneBuilder(new Vector3(0.2f, 0.0f, 0.43f)); var scatterableComputer = new ScatterableComputer(); var hitableSphereComputer = new HitableSphereComputer(); // Create the scene var elementBuilderFactory = new ElementBuilderFactory(entityIdFactory, hitableSphereComputer, scatterableComputer); sceneBuilder.AddElement(elementBuilderFactory.Create() .WithPosition(new Position(new Vector3(0.725f, 0.5f, 0.725f))) .WithShape(new Sphere(0.5f)) .WithMaterial(new Diffuse(new Vector3(0.0f, 1.0f, 0.0f))).Build()); sceneBuilder.AddElement(elementBuilderFactory.Create() .WithPosition(new Position(new Vector3(0.0f, -200.0f, 0.0f))) .WithShape(new Sphere(200f)) .WithMaterial(new Diffuse(new Vector3(0.5f, 0.5f, 0.5f))).Build()); var cameraFactory = new CameraFactory(); var lookFrom = new Vector3(0, 8, 10); var lookat = new Vector3(0, 0, 0); var distanceToFocus = (lookFrom - lookat).Length(); const float aperture = 0.1f; var camera = cameraFactory.CreateCamera(lookFrom, lookat, new Vector3(0, 1, 0), 20, (float)ResolutionHorizontal / ResolutionVertical, aperture, distanceToFocus); var scene = sceneBuilder.Build(); var tracer = new MonitoringTracer( new BackgroundTracer(scene, camera, ResolutionHorizontal, ResolutionVertical, Sampling)); return(tracer.Trace()); }