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); }
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; }
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); }