Esempio n. 1
0
        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" ) );
        }
Esempio n. 2
0
        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" ) );
        }
Esempio n. 3
0
        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" ) );
        }
Esempio n. 4
0
        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 ) );
            }
        }