Пример #1
0
        public void TestFlatRender()
        {
            Color  sphereColor = new Color(1f, 2f, 3f);
            Sphere sphere      = new Sphere(
                transformation: Transformation.Translation(new Vec(2f, 0f, 0f)) * Transformation.Scaling(new Vec(0.2f, 0.2f, 0.2f)),
                material: new Material(Brdf: new DiffuseBRDF(pig: new UniformPigment(sphereColor)))
                );

            HdrImage         image  = new HdrImage(3, 3);
            OrthogonalCamera camera = new OrthogonalCamera();
            ImageTracer      tracer = new ImageTracer(image, camera);
            World            world  = new World();

            world.addShape(sphere);
            FlatRender renderer = new FlatRender(world);

            tracer.fireAllRays(renderer);

            Assert.True(image.getPixel(0, 0).isClose(Constant.Black), "TestFlatRender failed - Assert 1/9");
            Assert.True(image.getPixel(1, 0).isClose(Constant.Black), "TestFlatRender failed - Assert 2/9");
            Assert.True(image.getPixel(2, 0).isClose(Constant.Black), "TestFlatRender failed - Assert 3/9");
            Assert.True(image.getPixel(0, 1).isClose(Constant.Black), "TestFlatRender failed - Assert 4/9");
            Assert.True(image.getPixel(1, 1).isClose(sphereColor), "TestFlatRender failed - Assert 5/9");
            Assert.True(image.getPixel(2, 1).isClose(Constant.Black), "TestFlatRender failed - Assert 6/9");
            Assert.True(image.getPixel(0, 2).isClose(Constant.Black), "TestFlatRender failed - Assert 7/9");
            Assert.True(image.getPixel(1, 2).isClose(Constant.Black), "TestFlatRender failed - Assert 8/9");
            Assert.True(image.getPixel(2, 2).isClose(Constant.Black), "TestFlatRender failed - Assert 9/9");
        }
Пример #2
0
        public void TestPointLightRenderer1()
        {
            World world = new World();

            world.addPointLight(new PointLight(new Point(10f, 10f, 10f), Constant.White));
            world.addShape(new Sphere(Transformation.Translation(new Vec(10f, 10f, 10f))));

            Sphere sphere = new Sphere(
                transformation: Transformation.Translation(new Vec(2f, 0f, 0f)) * Transformation.Scaling(new Vec(0.2f, 0.2f, 0.2f)),
                material: new Material(Brdf: new DiffuseBRDF(pig: new UniformPigment(Constant.White))));
            HdrImage         image  = new HdrImage(3, 3);
            OrthogonalCamera camera = new OrthogonalCamera();
            ImageTracer      tracer = new ImageTracer(i: image, c: camera);

            world.addShape(sphere);
            PointLightRender renderer = new PointLightRender(world);

            tracer.fireAllRays(renderer);

            Assert.True(image.getPixel(0, 0).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 1/9");
            Assert.True(image.getPixel(1, 0).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 2/9");
            Assert.True(image.getPixel(2, 0).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 3/9");
            Assert.True(image.getPixel(0, 1).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 4/9");
            Assert.True(image.getPixel(1, 1).isClose(renderer.ambientColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 5/9");
            Assert.True(image.getPixel(2, 1).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 6/9");
            Assert.True(image.getPixel(0, 2).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 7/9");
            Assert.True(image.getPixel(1, 2).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 8/9");
            Assert.True(image.getPixel(2, 2).isClose(renderer.backgroundColor), "TestPointLight rendered failed (light source shielded by a sphere) - Assert 9/9");
        }
Пример #3
0
        public void TestNormalizeImage()
        {
            var img = new HdrImage(2, 1);

            img.setPixel(0, 0, new Color(0.5e1f, 1.0e1f, 1.5e1f));
            img.setPixel(1, 0, new Color(0.5e3f, 1.0e3f, 1.5e3f));

            img.normalizeImage(factor: 1000.0f, luminosity: 100.0f);
            Assert.True(img.getPixel(0, 0).isClose(new Color(0.5e2f, 1.0e2f, 1.5e2f)), "TestNormalizeImage failed - Assert 1/2");
            Assert.True(img.getPixel(1, 0).isClose(new Color(0.5e4f, 1.0e4f, 1.5e4f)), "TestNormalizeImage failed - Assert 2/2");
        }
Пример #4
0
        public void TestGetSetPixel()
        {
            var appo = new Color(5.0f, 6.0f, 7.0f);

            DummyImage.setPixel(3, 2, appo);
            Assert.True(DummyImage.getPixel(3, 2).isClose(appo), "TestGetSetPixel failed - Assert 1/1");
        }
Пример #5
0
        public void TestImageCoverage()
        {
            HdrImage          image  = new HdrImage(4, 2);
            PerspectiveCamera camera = new PerspectiveCamera();
            ImageTracer       tracer = new ImageTracer(image, camera);

            tracer.fireAllRays((Ray r) => new Color(1f, 2f, 3f));
            for (int row = 0; row < image.height; row++)
            {
                for (int col = 0; col < image.width; col++)
                {
                    Assert.True(image.getPixel(col, row).isClose(new Color(1.0f, 2.0f, 3.0f)), $"TestImageCoverage failed - Assert row={row}, col={col}");
                }
            }
        } //end of function
Пример #6
0
        public void TestReadPfm()
        {
            var MyImg = new HdrImage(3, 2);

            byte[] LE_REFERENCE_BYTES =
            {
                0x50, 0x46, 0x0a, 0x33, 0x20, 0x32, 0x0a, 0x2d, 0x31, 0x2e, 0x30, 0x0a,
                0x00, 0x00, 0xc8, 0x42, 0x00, 0x00, 0x48, 0x43, 0x00, 0x00, 0x96, 0x43,
                0x00, 0x00, 0xc8, 0x43, 0x00, 0x00, 0xfa, 0x43, 0x00, 0x00, 0x16, 0x44,
                0x00, 0x00, 0x2f, 0x44, 0x00, 0x00, 0x48, 0x44, 0x00, 0x00, 0x61, 0x44,
                0x00, 0x00, 0x20, 0x41, 0x00, 0x00, 0xa0, 0x41, 0x00, 0x00, 0xf0, 0x41,
                0x00, 0x00, 0x20, 0x42, 0x00, 0x00, 0x48, 0x42, 0x00, 0x00, 0x70, 0x42,
                0x00, 0x00, 0x8c, 0x42, 0x00, 0x00, 0xa0, 0x42, 0x00, 0x00, 0xb4, 0x42
            };

            using (MemoryStream memSt = new MemoryStream(LE_REFERENCE_BYTES.Length))
            {
                memSt.Write(LE_REFERENCE_BYTES);
                memSt.Seek(0, SeekOrigin.Begin);
                MyImg.readPfm(memSt);
            }

            Assert.True(MyImg.width == 3, "TestReadPfm failed - Assert 1/16");
            Assert.True(MyImg.height == 2, "TestReadPfm failed - Assert 2/16");
            Assert.True(MyImg.getPixel(0, 0).isClose(new Color(10.0f, 20.0f, 30.0f)), "TestReadPfm failed - Assert 3/16");
            Assert.True(MyImg.getPixel(1, 0).isClose(new Color(40.0f, 50.0f, 60.0f)), "TestReadPfm failed - Assert 4/16");
            Assert.True(MyImg.getPixel(2, 0).isClose(new Color(70.0f, 80.0f, 90.0f)), "TestReadPfm failed - Assert 5/16");
            Assert.True(MyImg.getPixel(0, 1).isClose(new Color(100.0f, 200.0f, 300.0f)), "TestReadPfm failed - Assert 6/16");
            Assert.True(MyImg.getPixel(1, 1).isClose(new Color(400.0f, 500.0f, 600.0f)), "TestReadPfm failed - Assert 7/16");
            Assert.True(MyImg.getPixel(2, 1).isClose(new Color(700.0f, 800.0f, 900.0f)), "TestReadPfm failed - Assert 8/16");

            byte[] BE_REFERENCE_BYTES =
            {
                0x50, 0x46, 0x0a, 0x33, 0x20, 0x32, 0x0a, 0x31, 0x2e, 0x30, 0x0a, 0x42,
                0xc8, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, 0x43,
                0xc8, 0x00, 0x00, 0x43, 0xfa, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00, 0x44,
                0x2f, 0x00, 0x00, 0x44, 0x48, 0x00, 0x00, 0x44, 0x61, 0x00, 0x00, 0x41,
                0x20, 0x00, 0x00, 0x41, 0xa0, 0x00, 0x00, 0x41, 0xf0, 0x00, 0x00, 0x42,
                0x20, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x42,
                0x8c, 0x00, 0x00, 0x42, 0xa0, 0x00, 0x00, 0x42, 0xb4, 0x00, 0x00
            };

            using (MemoryStream memSt = new MemoryStream(BE_REFERENCE_BYTES.Length))
            {
                memSt.Write(BE_REFERENCE_BYTES);
                memSt.Seek(0, SeekOrigin.Begin);
                MyImg.readPfm(memSt);
            }

            Assert.True(MyImg.width == 3, "TestReadPfm failed - Assert 9/16");
            Assert.True(MyImg.height == 2, "TestReadPfm failed - Assert 10/16");
            Assert.True(MyImg.getPixel(0, 0).isClose(new Color(10.0f, 20.0f, 30.0f)), "TestReadPfm failed - Assert 11/16");
            Assert.True(MyImg.getPixel(1, 0).isClose(new Color(40.0f, 50.0f, 60.0f)), "TestReadPfm failed - Assert 12/16");
            Assert.True(MyImg.getPixel(2, 0).isClose(new Color(70.0f, 80.0f, 90.0f)), "TestReadPfm failed - Assert 13/16");
            Assert.True(MyImg.getPixel(0, 1).isClose(new Color(100.0f, 200.0f, 300.0f)), "TestReadPfm failed - Assert 14/16");
            Assert.True(MyImg.getPixel(1, 1).isClose(new Color(400.0f, 500.0f, 600.0f)), "TestReadPfm failed - Assert 15/16");
            Assert.True(MyImg.getPixel(2, 1).isClose(new Color(700.0f, 800.0f, 900.0f)), "TestReadPfm failed - Assert 16/16");
        }