public void ReflectionTest() { var image = new Image(100, 100); var scene = new Scene { Camera = new Camera(0, 0, 0) { Direction = Vector3.UnitZ, FieldOfView = 90f, Position = Vector3.Zero } }; var reflectiveSphere = new Sphere { Center = new Vector3(0, 0, -10), Radius = 2, Material = new BrdfMaterial { Scene = scene } }; var hollowSphere = new SphereHollow { Center = Vector3.Zero, Radius = 20, Material = new FullBright { Color = Color.FromArgb(255, 0, 0) } }; scene.RenderObjects = new List <IRenderObject>() { reflectiveSphere, hollowSphere }; scene.Render(image); foreach (var(x, y, pixel) in image.PixelEnumerator()) { Assert.Equal(1.0f, pixel.R); } }
static void Main(string[] args) { var image = new Image(1024, 1024); var scene = new Scene { Camera = new Camera(0, 0, 0) { Position = new Vector3 { X = 0, Y = 0, Z = 0 }, Direction = Vector3.UnitZ, FieldOfView = 90 } }; var sphereRed = new Sphere { Center = new Vector3(-2, 0, -10), Radius = 2, Material = new BrdfMaterial { Scene = scene } }; var sphereBlue = new Sphere { Center = new Vector3(2, 0, -10), Radius = 2, Material = new HitNormalMaterial() }; var encapsulatingSphere = new SphereHollow { Center = Vector3.Zero, Radius = 12f, Material = new FullBright { Color = Color.FromArgb(0, 255, 0) } }; var floorPlane = new Plane { Position = new Vector3(0, -2f, 0), Normal = new Vector3(0, -1, 0), Material = new FullBright { Color = Color.FromArgb(100, 100, 100) } }; var leftPlane = new Plane { Position = new Vector3(-4, 0, 0), Normal = new Vector3(-1, 0, 0), Material = new FullBright { Color = Color.FromArgb(255, 0, 0) } }; var rightPlane = new Plane { Position = new Vector3(4, 0, 0), Normal = new Vector3(1, 0, 0), Material = new FullBright { Color = Color.FromArgb(0, 0, 255) } }; scene.RenderObjects = new List <IRenderObject>() { sphereRed, sphereBlue, encapsulatingSphere, floorPlane, leftPlane, rightPlane }; scene.Render(image); var pictureDirectory = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "JRay" ); Directory.CreateDirectory(pictureDirectory); image.SavePng(Path.Combine(pictureDirectory, $"{DateTime.Now:yyyyMMdd hhmmss}")); }