Пример #1
0
        public void Start(string[] args)
        {
            SceneFileLoader loader = new SceneFileLoader();

            ParseInputLine(args);
            ProgramScene scene    = loader.load(sourcePath);
            Renderer     renderer = new Renderer(scene);

            renderer.ren(scene, outputPath);
        }
Пример #2
0
 public Renderer(ProgramScene scene)
 {
     this.scene     = scene;
     _objLoader     = Container.GetService <IObjLoader>();
     _camera        = Container.GetService <ICameraPositionProvider>();
     _objLoader     = Container.GetService <IObjLoader>();
     _raysProvider  = Container.GetService <IRaysProvider>();
     _width         = scene.width;
     _height        = (int)(_width / _aspectRatio);
     _viewportWidth = _aspectRatio * _viewportHeight;
 }
Пример #3
0
        public void ren(ProgramScene scene, string outputPath)
        {
            List <ILightSource> lightList        = new List <ILightSource>();
            PointLight          pointLightSource = new PointLight {
                Intencity = 0.5f, Position = new Vector3(0, 0, -1)
            };
            AmbientLight ambientLightSource = new AmbientLight {
                Intencity = 0.1f
            };
            DirectionalLight directonalLightSource = new DirectionalLight {
                Intencity = 0.4f, Direction = new Vector3(1, 0.7f, 3)
            };

            lightList.Add(pointLightSource);
            lightList.Add(ambientLightSource);
            lightList.Add(directonalLightSource);

            var    cameraPos = scene.mainCamera.GetCameraPosition();
            Screen screen    = new Screen(_viewportHeight, _viewportWidth, focalLength, cameraPos);
            var    rays      = _raysProvider.GetRays(_width, _height, cameraPos, screen);

            byte[] rgb = new byte[_width * _height * 3];

            List <SphereObject> spheresLst  = new List <SphereObject>();
            List <MeshObject>   meshObjects = new List <MeshObject>();

            foreach (var obj in scene.objects)
            {
                if (obj is SphereObject)
                {
                    spheresLst.Add((SphereObject)obj);
                }
                if (obj is MeshObject)
                {
                    meshObjects.Add((MeshObject)obj);
                }
            }

            if (spheresLst.Count > 0)
            {
                renderSpheres(spheresLst, rays, ref rgb, lightList);
            }
            if (meshObjects.Count > 0)
            {
                renderMeshs(meshObjects, rays, ref rgb, lightList);
            }
            Image     image  = new Image(_width, _height, rgb);
            PpmWriter writer = new PpmWriter();

            writer.Write(outputPath, image);
        }
        public ProgramScene load(string path)
        {
            scene = new ProgramScene();
            var readResultJson = _sceneIO.Read(path);

            scene.cameras = getSceneCameras(readResultJson.Cameras);
            scene.objects = getSceneObjects(readResultJson.SceneObjects);

            if (readResultJson.RenderOptions != null)
            {
                scene.width      = readResultJson.RenderOptions.Width;
                scene.mainCamera = scene.cameras.Where(c => c.id == (int)readResultJson.RenderOptions.CameraId).FirstOrDefault();
            }

            return(scene);
        }