public void TestRedEmissiveWorldTriangle() { ConstantEmissiveMaterial front = new ConstantEmissiveMaterial( new Color3( 1.0f, 0.0f, 0.0f ) ); ConstantEmissiveMaterial back = new ConstantEmissiveMaterial( new Color3( 0.0f, 0.0f, 1.0f ) ); Triangle triangle = new Triangle( new Point( 0.0f, 0.0f, 3.0f ), new Point( 1.0f, 0.0f, 3.0f ), new Point( 1.0f, 1.0f, 3.0f ) ); SimpleObject so = new SimpleObject( triangle, null, new EmissiveMaterialBase[] { front, back }, null, null, null ); ListScene scene = new ListScene(); scene.Add( so ); Framebuffer fb = new Framebuffer( Color3.Black, 500, 500 ); Cameras.Pinhole( scene, RenderMethod.RecursiveRayTrace, fb, 0, 0.0001f, 0, 1.0f, true, 1.0f, 1.0f, 1.0f, new Point( 0.0f, 0.0f, -2.0f ), new Vector( 0.0f, 0.0f, 1.0f ), new Vector( 0.0f, 1.0f, 0.0f ), 1, 1, false ); Assert.IsTrue( Pfm.Compare( fb, 0.01f, 0.02f, "..\\..\\TestImages\\TestRedEmissiveWorldTriangle.pfm" ) ); }
public void TestMirrorPhongSphere() { Sphere s1 = new Sphere( new Point( 1.0f, 0.0f, 3.0f ), 1.0f ); Sphere s2 = new Sphere( new Point( -1.0f, 0.0f, 3.0f ), 1.0f ); ConstantEmissiveMaterial es = new ConstantEmissiveMaterial( new Color3( 1.0f, 0.0f, 0.0f ) ); IndirectlyLitMaterialBase Mirror = new PerfectSpecularIndirectMaterial( Color3.White ); EmissiveMaterialBase[] array1 = new EmissiveMaterialBase[] { es, null }; IndirectlyLitMaterialBase[] array2 = new IndirectlyLitMaterialBase[] { Mirror, null }; SimpleObject so1 = new SimpleObject( s1, null, array1, null, null, null ); SimpleObject so2 = new SimpleObject( s2, s2.CreateNormals(), null, null, array2, null ); ListScene scene = new ListScene(); scene.Add( so1 ); scene.Add( so2 ); Framebuffer fb = new Framebuffer( Color3.Black, 500, 500 ); Cameras.Pinhole( scene, RenderMethod.RecursiveRayTrace, fb, 1, 0.0001f, 0, 1.0f, true, 1.0f, 1.0f, 1.0f, new Point( 0.0f, 0.0f, -2.0f ), new Vector( 0.0f, 0.0f, 1.0f ), new Vector( 0.0f, 1.0f, 0.0f ), 1, 1, false ); Assert.IsTrue( Pfm.Compare( fb, 0.01f, 0.02f, "..\\..\\TestImages\\TestMirrorPhongSphere.pfm" ) ); }
public void TestRedEmissiveModelSphere() { ModelGeometry sphere = new ModelGeometry( new Sphere( new Point( 0.0f, 0.0f, 3.0f ), 1.0f ), Matrix.Identity ); ConstantEmissiveMaterial s = new ConstantEmissiveMaterial( new Color3( 1.0f, 0.0f, 0.0f ) ); SimpleObject so = new SimpleObject( sphere, null, new EmissiveMaterialBase[] { s, s }, null, null, null ); ListScene scene = new ListScene(); scene.Add( so ); Framebuffer fb = new Framebuffer( Color3.Black, 500, 500 ); Cameras.Pinhole( scene, RenderMethod.RecursiveRayTrace, fb, 0, 0.0001f, 0, 1.0f, true, 1.0f, 1.0f, 1.0f, new Point( 0.0f, 0.0f, -2.0f ), new Vector( 0.0f, 0.0f, 1.0f ), new Vector( 0.0f, 1.0f, 0.0f ), 1, 1, false ); Assert.IsTrue( Pfm.Compare( fb, 0.01f, 0.02f, "..\\..\\TestImages\\TestRedEmissiveModelSphere.pfm" ) ); }
public static void CreateScene( SceneBase Scene ) { List<Triangle> ShortBox = new List<Triangle>(); List<Triangle> WhiteWalls = new List<Triangle>(); List<Triangle> TallBox = new List<Triangle>(); List<Triangle> RedWall = new List<Triangle>(); List<Triangle> BlueWall = new List<Triangle>(); List<Triangle> Light = new List<Triangle>(); WhiteWalls.AddRange( TriangleCreator.CreateQuad( 550.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 560.000000f, 550.000000f, 0.000000f, 560.000000f ) ); WhiteWalls.AddRange( TriangleCreator.CreateQuad( 560.000000f, 550.000000f, 0.000000f, 560.000000f, 550.000000f, 560.000000f, 0.000000f, 550.000000f, 560.000000f, 0.000000f, 550.000000f, 0.000000f ) ); WhiteWalls.AddRange( TriangleCreator.CreateQuad( 550.000000f, 0.000000f, 560.000000f, 0.000000f, 0.000000f, 560.000000f, 0.000000f, 550.000000f, 560.000000f, 560.000000f, 550.000000f, 560.000000f ) ); BlueWall.AddRange( TriangleCreator.CreateQuad( 0.000000f, 0.000000f, 560.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 550.000000f, 0.000000f, 0.000000f, 550.000000f, 560.000000f ) ); RedWall.AddRange( TriangleCreator.CreateQuad( 550.000000f, 0.000000f, 0.000000f, 550.000000f, 0.000000f, 560.000000f, 560.000000f, 550.000000f, 560.000000f, 560.000000f, 550.000000f, 0.000000f ) ); ShortBox.AddRange( TriangleCreator.CreateQuad( 130.000000f, 165.000000f, 65.000000f, 82.000000f, 165.000000f, 225.000000f, 240.000000f, 165.000000f, 272.000000f, 290.000000f, 165.000000f, 114.000000f ) ); ShortBox.AddRange( TriangleCreator.CreateQuad( 290.000000f, 0.000000f, 114.000000f, 290.000000f, 165.000000f, 114.000000f, 240.000000f, 165.000000f, 272.000000f, 240.000000f, 0.000000f, 272.000000f ) ); ShortBox.AddRange( TriangleCreator.CreateQuad( 130.000000f, 0.000000f, 65.000000f, 130.000000f, 165.000000f, 65.000000f, 290.000000f, 165.000000f, 114.000000f, 290.000000f, 0.000000f, 114.000000f ) ); ShortBox.AddRange( TriangleCreator.CreateQuad( 82.000000f, 0.000000f, 225.000000f, 82.000000f, 165.000000f, 225.000000f, 130.000000f, 165.000000f, 65.000000f, 130.000000f, 0.000000f, 65.000000f ) ); ShortBox.AddRange( TriangleCreator.CreateQuad( 240.000000f, 0.000000f, 272.000000f, 240.000000f, 165.000000f, 272.000000f, 82.000000f, 165.000000f, 225.000000f, 82.000000f, 0.000000f, 225.000000f ) ); TallBox.AddRange( TriangleCreator.CreateQuad( 423.000000f, 330.000000f, 247.000000f, 265.000000f, 330.000000f, 296.000000f, 314.000000f, 330.000000f, 456.000000f, 472.000000f, 330.000000f, 406.000000f ) ); TallBox.AddRange( TriangleCreator.CreateQuad( 423.000000f, 0.000000f, 247.000000f, 423.000000f, 330.000000f, 247.000000f, 472.000000f, 330.000000f, 406.000000f, 472.000000f, 0.000000f, 406.000000f ) ); TallBox.AddRange( TriangleCreator.CreateQuad( 472.000000f, 0.000000f, 406.000000f, 472.000000f, 330.000000f, 406.000000f, 314.000000f, 330.000000f, 456.000000f, 314.000000f, 0.000000f, 456.000000f ) ); TallBox.AddRange( TriangleCreator.CreateQuad( 314.000000f, 0.000000f, 456.000000f, 314.000000f, 330.000000f, 456.000000f, 265.000000f, 330.000000f, 296.000000f, 265.000000f, 0.000000f, 296.000000f ) ); TallBox.AddRange( TriangleCreator.CreateQuad( 265.000000f, 0.000000f, 296.000000f, 265.000000f, 330.000000f, 296.000000f, 423.000000f, 330.000000f, 247.000000f, 423.000000f, 0.000000f, 247.000000f ) ); Light.AddRange( TriangleCreator.CreateQuad( 303.000000f, 549.900000f, 247.000000f, 303.000000f, 549.900000f, 303.000000f, 247.000000f, 549.900000f, 303.000000f, 247.000000f, 549.900000f, 247.000000f ) ); foreach ( Triangle T in Light ) { ConstantEmissiveMaterial Emissive = new ConstantEmissiveMaterial( new Color3( 12.0f, 12.0f, 12.0f ) ); Scene.Add( new SimpleObject( T, null, new EmissiveMaterialBase[] { Emissive, Emissive }, null, null, null ) ); } foreach ( Triangle T in TallBox ) { LambertianIndirectMaterial Indirect = new LambertianIndirectMaterial( new Color3( 0.75f, 0.75f, 0.75f ) ); Scene.Add( new SimpleObject( T, T.CreateNormals(), null, null, new IndirectlyLitMaterialBase[] { Indirect, Indirect }, null ) ); } foreach ( Triangle T in ShortBox ) { LambertianIndirectMaterial Indirect = new LambertianIndirectMaterial( new Color3( 0.75f, 0.75f, 0.75f ) ); Scene.Add( new SimpleObject( T, T.CreateNormals(), null, null, new IndirectlyLitMaterialBase[] { Indirect, Indirect }, null ) ); } foreach ( Triangle T in BlueWall ) { LambertianIndirectMaterial Indirect = new LambertianIndirectMaterial( new Color3( 0.25f, 0.25f, 0.75f ) ); Scene.Add( new SimpleObject( T, T.CreateNormals(), null, null, new IndirectlyLitMaterialBase[] { Indirect, Indirect }, null ) ); } foreach ( Triangle T in RedWall ) { LambertianIndirectMaterial Indirect = new LambertianIndirectMaterial( new Color3( 0.75f, 0.25f, 0.25f ) ); Scene.Add( new SimpleObject( T, T.CreateNormals(), null, null, new IndirectlyLitMaterialBase[] { Indirect, Indirect }, null ) ); } foreach ( Triangle T in WhiteWalls ) { LambertianIndirectMaterial Indirect = new LambertianIndirectMaterial( new Color3( 0.75f, 0.75f, 0.75f ) ); Scene.Add( new SimpleObject( T, T.CreateNormals(), null, null, new IndirectlyLitMaterialBase[] { Indirect, Indirect }, null ) ); } }