Пример #1
0
    public void build()
    {
        DestroyRenderAreaTexture();

        texture = new Texture2D(200, 200);
        GameObject.Find("ViewRectangle").GetComponent <MeshRenderer> ().material.mainTexture = texture;
        vp = new ViewPlane(texture.width, texture.height, 1.0f, 256);
        background_color = Constants.black;

        tracer_ptr = new RayCastTracer(this);

        Jittered        jit    = new Jittered(256);
        AmbientOccluder ambocl = new AmbientOccluder();

        ambocl.scale_radiance(1.0f);
        ambocl.set_color(Constants.white);
        ambocl.set_minAmount(Constants.black);
        ambocl.SetSampler(jit);
        set_ambient_light(ambocl);


        PerspectiveCamera pinhole_ptr1 = new PerspectiveCamera();

        pinhole_ptr1.set_eye(new Vector3(0, 0, 500));
        pinhole_ptr1.set_lookat(Vector3.zero);
        pinhole_ptr1.set_view_distance(600.0f);
        pinhole_ptr1.compute_uvw();
        set_camera(pinhole_ptr1);

        Directional directional = new Directional();

        directional.set_color(new Color(1, 1, 1, 1));
        directional.set_direction(new Vector3(-1, -1, 0));
        directional.cast_shadows = true;
        directional.scale_radiance(3.0f);
        add_light(directional);

        Matte mat_ptr = new Matte();

        mat_ptr.set_ka(0.25f);
        mat_ptr.set_kd(0.65f);
        mat_ptr.set_cd(new Color(1, 1, 0, 1));

        Sphere sphere = new Sphere();

        sphere.sphereCenter = new Vector3(0, 0, 0);
        sphere.sphereRad    = 20.0f;
        sphere.set_material(mat_ptr);

        Instance sphereInst = new Instance(sphere);

        sphereInst.set_material(mat_ptr);


        add_object(sphereInst);

        sphereInst.set_identity();
        sphereInst.Shear(1.15f, 0.6f, 1.2f, 1.8f, 2.2f, 2.4f);
        render_scene();
    }
Пример #2
0
        public void Build()
        {
            lights          = new List <PointLight>();
            objects         = new List <Primitive>();
            backgroundColor = RGBColor.BLACK;
            //camera = new OrthogonalCamera(600, 480);
            int sceneWidth  = 240;
            int sceneHeight = 240;

            camera   = new PerspectiveCamera(new Vector3(0, 0, 80), new Vector3(0, 0, -1), 50, sceneWidth, sceneHeight); //50
            jittered = new Jittered(9);
            //tracer = new MultipleObjectsTracer(this);

            tracer = new Whitted(this, 10);

            Material.Material orangeMaterial  = new Phong(Color.Orange, 0.8, 1, 30);
            Material.Material redMaterial     = new Lambertian(Color.PowderBlue);
            Material.Material blueMaterial    = new Lambertian(RGBColor.NAVY_BLUE);
            Material.Material grayMaterial    = new Phong(Color.LightGray, 0.8, 1, 30);
            Material.Material yellowMaterial  = new Phong(Color.Yellow, 0.8, 1, 30);
            Material.Material skyBlueMaterial = new Phong(Color.SkyBlue, 0.8, 1, 30);
            Material.Material refMat          = new Reflective(RGBColor.WHITE, 0, 1, 350, 1);
            Material.Material refMat1         = new Reflective(RGBColor.WHITE, 0.5, 1, 350, 0.5);
            Material.Material lamb            = new Lambertian(RGBColor.SKY_BLUE);
            Material.Material refractiveMat   = new Refractive(RGBColor.WHITE, 0, 1, 350, 1);


            Quad wall1 = new Quad(new Vector3(-30, 30, 30), new Vector3(-30, -30, 30), new Vector3(-15, 15, -15), new Vector3(-15, -15, -15));
            //wall1.AddQuadToScene(this, skyBlueMaterial);


            Triangle t1 = new Triangle(new Vector3(-30, 30, 30), new Vector3(-30, -30, 30), new Vector3(-20, 20, -15), new Vector3(1, 0, 0));

            t1.Material = redMaterial;
            AddObject(t1);
            Triangle t2 = new Triangle(new Vector3(-30, -30, 30), new Vector3(-20, 20, -15), new Vector3(-20, -20, -15), new Vector3(1, 0, 0));

            t2.Material = redMaterial;
            AddObject(t2);

            Triangle t3 = new Triangle(new Vector3(30, 30, 30), new Vector3(30, -30, 30), new Vector3(20, 20, -15), new Vector3(-1, 0, 0));

            t3.Material = blueMaterial;
            AddObject(t3);
            Triangle t4 = new Triangle(new Vector3(30, -30, 30), new Vector3(20, 20, -15), new Vector3(20, -20, -15), new Vector3(-1, 0, 0));

            t4.Material = blueMaterial;
            AddObject(t4);

            Triangle t5 = new Triangle(new Vector3(-30, -30, 30), new Vector3(-20, -20, -15), new Vector3(30, -30, 30), new Vector3(0, 1, 0));

            t5.Material = grayMaterial;
            AddObject(t5);
            Triangle t6 = new Triangle(new Vector3(30, -30, 30), new Vector3(-20, -20, -15), new Vector3(20, -20, -15), new Vector3(0, 1, 0));

            t6.Material = grayMaterial;
            AddObject(t6);

            Triangle t7 = new Triangle(new Vector3(-20, 20, -15), new Vector3(-20, -20, -15), new Vector3(20, 20, -15), new Vector3(0, 0, 1));

            t7.Material = grayMaterial;
            AddObject(t7);
            Triangle t8 = new Triangle(new Vector3(20, 20, -15), new Vector3(20, -20, -15), new Vector3(-20, -20, -15), new Vector3(0, 0, 1));

            t8.Material = grayMaterial;
            AddObject(t8);

            Triangle t9 = new Triangle(new Vector3(-30, 30, 30), new Vector3(30, 30, 30), new Vector3(-20, 20, -15), new Vector3(0, -1, 0));

            t9.Material = grayMaterial;
            AddObject(t9);
            Triangle t10 = new Triangle(new Vector3(30, 30, 30), new Vector3(-20, 20, -15), new Vector3(20, 20, -15), new Vector3(0, -1, 0));

            t10.Material = grayMaterial;
            AddObject(t10);

            Sphere sphere = new Sphere(new Vector3(-5, 10, 10), 8);

            sphere.Material = refractiveMat;
            AddObject(sphere);

            Sphere sphere1 = new Sphere(new Vector3(10, 0, 12), 5);

            sphere1.Material = orangeMaterial;
            AddObject(sphere1);

            sphere1          = new Sphere(new Vector3(-4, -6, 15), 6);
            sphere1.Material = refMat;
            AddObject(sphere1);

            Plane plane = new Plane(new Vector3(0, -5, 0), new Vector3(0, 1, 0));

            plane.Material = orangeMaterial;
            //AddObject(plane);

            Mesh mesh = new Mesh("ico.obj");
            // mesh.AddModelToScene(this, yellowMaterial);

            PointLight light = new PointLight(new Vector3(0, 17, 50), RGBColor.WHITE);

            AddLight(light);

            /*sphere = new Sphere(new Vector3(0, -10, 0), 5);
             * sphere.Material = yellowMaterial;
             * //AddObject(sphere);
             *
             * Triangle triangle = new Triangle(new Vector3(0, 0, 10), new Vector3(10, 0, 10), new Vector3(10, 10, 10), new Vector3(0, 0, 1));
             * triangle.Material = orangeMaterial;
             * //AddObject(triangle);
             *
             * Mesh mesh = new Mesh("ico.obj");
             * mesh.AddModelToScene(this, yellowMaterial);
             *
             * Plane plane = new Plane(new Vector3(0,0,-40), new Vector3(0,0,1));
             * Material.Material lamb2 = new Lambertian(RGBColor.DARK_SALMON);
             * Material.Material refMat = new Reflective(RGBColor.GREEN, 0.8, 1, 30, 0.1);
             * plane.Material = lamb2;
             * AddObject(plane);*/

            // PointLight light = new PointLight(new Vector3(-25, 0, 20), Color.White);
            // AddLight(light);

            // PointLight light1 = new PointLight(new Vector3(25, 0, 20), Color.White);
            // AddLight(light1);



            // Sphere sphere = new Sphere(new Vector3(0, 0, 0), 10);

            /* Triangle t7 = new Triangle(new Vector3(0, 0, 0), new Vector3(10, 0, 0), new Vector3(10, 10, 0), new Vector3(0, 0, 1));
             * t7.Material = grayMaterial;
             *
             *
             * Bitmap textureBitmap = new Bitmap("test.png");
             * RectangularMapping sphericalMapping = new RectangularMapping();
             * ImageTexture imageTexture = new ImageTexture(textureBitmap, sphericalMapping);
             *
             * LambertianTexture textureMaterial = new LambertianTexture(imageTexture);
             *
             *
             * t7.Material = textureMaterial;
             * AddObject(t7);
             * PointLight light = new PointLight(new Vector3(20, 0, 40), Color.White);
             * AddLight(light);*/
        }
    public void build()
    {
        DestroyRenderAreaTexture();

        texture = new Texture2D(200, 200);
        GameObject.Find("ViewRectangle").GetComponent <MeshRenderer> ().material.mainTexture = texture;
        vp               = new ViewPlane(texture.width, texture.height, 1.0f, 1);
        vp.max_depth     = 5;
        background_color = Constants.white;

        tracer_ptr = new Whitted(this);

        Jittered        jit    = new Jittered(1);
        AmbientOccluder ambocl = new AmbientOccluder();

        ambocl.scale_radiance(1.0f);
        ambocl.set_color(Constants.white);
        ambocl.set_minAmount(Constants.black);
        ambocl.SetSampler(jit);
        set_ambient_light(ambocl);


        PerspectiveCamera pinhole_ptr1 = new PerspectiveCamera();

        pinhole_ptr1.set_eye(new Vector3(0, 0, 500));
        pinhole_ptr1.set_lookat(Vector3.zero);
        pinhole_ptr1.set_view_distance(600.0f);
        pinhole_ptr1.compute_uvw();
        set_camera(pinhole_ptr1);

        Directional directional = new Directional();

        directional.set_color(new Color(1, 1, 1, 1));
        directional.set_direction(new Vector3(-1, -1, 0));
        directional.cast_shadows = true;
        directional.scale_radiance(3.0f);
        add_light(directional);

        Dielectric mat_ptr = new Dielectric();

        mat_ptr.set_eta_in(0.8f);
        mat_ptr.set_eta_in(1.2f);
        mat_ptr.set_cf_in(new Color(0.0f, 1.0f, 0.8f, 1));
        mat_ptr.set_cf_out(new Color(0.75f, 1.0f, 0.4f, 1));
        mat_ptr.set_ks(0.5f);
        mat_ptr.set_exp(100.0f);
        mat_ptr.set_ior(1.2f);

        Sphere sph = new Sphere();

        sph.sphereCenter = Vector3.zero;
        sph.sphereRad    = 1.0f;
        sph.set_material(mat_ptr);

        Instance sphInst = new Instance(sph);

        sphInst.set_material(mat_ptr);
        add_object(sphInst);

        sphInst.set_identity();
        sphInst.Scale(40, 40, 1);
        sphInst.Translate(0.0f, 0.0f, -60);

        Dielectric mat_ptr1 = new Dielectric();

        mat_ptr.set_eta_in(0.2f);
        mat_ptr.set_eta_in(0.4f);
        mat_ptr1.set_cf_in(new Color(0.0f, 1.0f, 0.0f, 1));
        mat_ptr1.set_cf_out(new Color(0.75f, 1.0f, 0.0f, 1));
        mat_ptr1.set_ks(0.8f);
        mat_ptr1.set_exp(100.0f);
        mat_ptr1.set_ior(1.52f);

        Rectangle rect1 = new Rectangle(Vector3.zero, new Vector3(1, 0, 0), new Vector3(0, 1, 0));

        rect1.set_material(mat_ptr1);

        Instance rect1Inst = new Instance(rect1);

        rect1Inst.set_material(mat_ptr1);
        add_object(rect1Inst);

        rect1Inst.set_identity();
        rect1Inst.Scale(80, 80, 1);
        rect1Inst.Translate(-40, -40, 0.0f);

        render_scene();
    }