public void Convert_ScreenPointToViewportPoint_ReturnsViewportVector3d(int screenX, int screenY, Vector3d expected)
        {
            var cameraConverter = new CameraConverter(_screenParameters, _viewportParameters);

            var viewportPoint = cameraConverter.ScreenToViewport(screenX, screenY);

            Assert.Equal(expected, viewportPoint);
        }
예제 #2
0
        /// <summary> Renders the given scene. </summary>
        public IDrawing Render(Scene scene)
        {
            var drawing   = new ImageSharpDrawing(_screenParameters.Width, _screenParameters.Height);
            var rayTracer = new RayTracer(scene, _renderParameters);

            Parallel.For(0, _screenParameters.Height, (y) =>
            {
                for (var x = 0; x < _screenParameters.Width; ++x)
                {
                    var direction  = _viewportParameters.CameraRotation * _cameraConverter.ScreenToViewport(x, y);
                    var ray        = new Ray(_viewportParameters.CameraPosition, direction);
                    var pixelColor = rayTracer.Trace(ray);

                    drawing.SetPixel(x, y, pixelColor);
                }
            });

            return(drawing);
        }