public ElementBuilderFactory(EntityIdFactory entityIdFactory, IHitableSphereComputer hitableSphereComputer,
                              IScatterableComputer scatterableComputer)
 {
     _entityIdFactory       = entityIdFactory;
     _hitableSphereComputer = hitableSphereComputer;
     _scatterableComputer   = scatterableComputer;
 }
Esempio n. 2
0
        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());
        }