Beispiel #1
0
        private void AddSphereAndBox()
        {
            // setup a solid reflecting sphere
            double radius = 1.5;

            RayTracer.BaseShape bigSphere = new RayTracer.SphereShape(new Vector3(1, 3, 4), radius, new RayTracer.SolidMaterial(new RGBA_Floats(0, .5, .5), 0.2, 0.0, 2.0));
            renderCollection.Add(bigSphere);

            RayTracer.BoxShape box = new RayTracer.BoxShape(new Vector3(-1, 2, 0), new Vector3(1, 4, 2),
                                                            new RayTracer.SolidMaterial(new RGBA_Floats(.9, .2, .1), .01, 0.0, 2.0));
            renderCollection.Add(box);
        }
Beispiel #2
0
        private void AddBoxAndBoxBooleanTest()
        {
            RayTracer.BoxShape box1 = new RayTracer.BoxShape(new Vector3(.5, .5, .5), new Vector3(1.5, 1.5, 1.5),
                                                             new RayTracer.SolidMaterial(RGBA_Floats.Green, .01, 0.0, 2.0));

            List <RayTracer.IRayTraceable> subtractShapes = new List <RayTracer.IRayTraceable>();

            RayTracer.SolidMaterial material = new RayTracer.SolidMaterial(RGBA_Floats.Red, 0, 0, 0);
            subtractShapes.Add(new BoxShape(new Vector3(), new Vector3(1, 1, 1), material));

            RayTracer.IRayTraceable subtractGroup = RayTracer.BoundingVolumeHierarchy.CreateNewHierachy(subtractShapes);
            Difference merge = new Difference(box1, subtractGroup);

            renderCollection.Add(merge);
        }
Beispiel #3
0
        private void AddBoxAndSheresBooleanTest()
        {
            RayTracer.BoxShape box1 = new RayTracer.BoxShape(new Vector3(.5, .5, .5), new Vector3(1.5, 1.5, 1.5),
                                                             new RayTracer.SolidMaterial(RGBA_Floats.Green, 0, 0, 0));//.01, 0.0, 2.0));

            List <RayTracer.IRayTraceable> subtractShapes = new List <RayTracer.IRayTraceable>();

            RayTracer.SolidMaterial material = new RayTracer.SolidMaterial(RGBA_Floats.Red, 0, 0, 0);

#if true
            // two big spheres.  Looks good.
            subtractShapes.Add(new RayTracer.SphereShape(new Vector3(.5, .5, 1), .6, material));
            subtractShapes.Add(new RayTracer.SphereShape(new Vector3(1.5, .5, 1), .6, material));

            Transform cylinder = new Transform(new RayTracer.CylinderShape(.1, 3, material));
            cylinder.MoveToAbsolute(1, 1, 1);
            cylinder.RotateRelative(.1, .6, .6);
            //subtractShapes.Add(cylinder);
            //renderCollection.Add(cylinder);
#else
            for (int z = 0; z < 6; z++)
            {
                for (int y = 0; y < 6; y++)
                {
                    for (int x = 0; x < 6; x++)
                    {
                        subtractShapes.Add(new SphereShape(new Vector3(x * .2 + .5, y * .2 + .5, z * .2 + .5), .1, material));
                        //subtractShapes.Add(new SphereShape(new Vector3(x * .2 + .5, y * .2 + .5, z * .2 + .5), .13, material));
                    }
                }
            }
#endif


            IRayTraceable subtractGroup = BoundingVolumeHierarchy.CreateNewHierachy(subtractShapes);
            Difference    merge         = new Difference(box1, subtractGroup);

            renderCollection.Add(merge);
        }
Beispiel #4
0
        private void AddAxisMarker()
        {
            int    count = 10;
            double size  = .1;

            for (int i = 1; i < count + 1; i++)
            {
                RGBA_Floats             xColor    = new RGBA_Floats(1, i / (double)count, i / (double)count);
                RayTracer.SolidMaterial xMaterial = new RayTracer.SolidMaterial(xColor, 0, 0.0, 2.0);
                RayTracer.BoxShape      xBox      = new RayTracer.BoxShape(new Vector3(i * size, 0, 0), new Vector3(i * size + size, size, size), xMaterial);
                renderCollection.Add(xBox);

                RGBA_Floats             yColor    = new RGBA_Floats(i / (double)count, 1, i / (double)count);
                RayTracer.SolidMaterial yMaterial = new RayTracer.SolidMaterial(yColor, 0, 0.0, 2.0);
                RayTracer.BoxShape      yBox      = new RayTracer.BoxShape(new Vector3(0, i * size, 0), new Vector3(size, i * size + size, size), yMaterial);
                //yBox.Transform.Position += new Vector3D(1, 1, 1);
                renderCollection.Add(yBox);

                RGBA_Floats             zColor    = new RGBA_Floats(i / (double)count, i / (double)count, 1);
                RayTracer.SolidMaterial zMaterial = new RayTracer.SolidMaterial(zColor, 0, 0.0, 2.0);
                RayTracer.BoxShape      zBox      = new RayTracer.BoxShape(new Vector3(0, 0, i * size), new Vector3(size, size, i * size + size), zMaterial);
                renderCollection.Add(zBox);
            }
        }
        private void AddAxisMarker()
        {
            int count = 10;
            double size = .1;
            for (int i = 1; i < count + 1; i++)
            {
                RGBA_Floats xColor = new RGBA_Floats(1, i / (double)count, i / (double)count);
                RayTracer.SolidMaterial xMaterial = new RayTracer.SolidMaterial(xColor, 0, 0.0, 2.0);
                RayTracer.BoxShape xBox = new RayTracer.BoxShape(new Vector3(i * size, 0, 0), new Vector3(i * size + size, size, size), xMaterial);
                renderCollection.Add(xBox);

                RGBA_Floats yColor = new RGBA_Floats(i / (double)count, 1, i / (double)count);
                RayTracer.SolidMaterial yMaterial = new RayTracer.SolidMaterial(yColor, 0, 0.0, 2.0);
                RayTracer.BoxShape yBox = new RayTracer.BoxShape(new Vector3(0, i * size, 0), new Vector3(size, i * size + size, size), yMaterial);
                //yBox.Transform.Position += new Vector3D(1, 1, 1);
                renderCollection.Add(yBox);

                RGBA_Floats zColor = new RGBA_Floats(i / (double)count, i / (double)count, 1);
                RayTracer.SolidMaterial zMaterial = new RayTracer.SolidMaterial(zColor, 0, 0.0, 2.0);
                RayTracer.BoxShape zBox = new RayTracer.BoxShape(new Vector3(0, 0, i * size), new Vector3(size, size, i * size + size), zMaterial);
                renderCollection.Add(zBox);
            }
        }
        private void AddSphereAndBox()
        {
            // setup a solid reflecting sphere
            double radius = 1.5;
            RayTracer.BaseShape bigSphere = new RayTracer.SphereShape(new Vector3(1, 3, 4), radius, new RayTracer.SolidMaterial(new RGBA_Floats(0, .5, .5), 0.2, 0.0, 2.0));
            renderCollection.Add(bigSphere);

            RayTracer.BoxShape box = new RayTracer.BoxShape(new Vector3(-1, 2, 0), new Vector3(1, 4, 2),
                               new RayTracer.SolidMaterial(new RGBA_Floats(.9, .2, .1), .01, 0.0, 2.0));
            renderCollection.Add(box);
        }
        private void AddBoxAndBoxBooleanTest()
        {
            RayTracer.BoxShape box1 = new RayTracer.BoxShape(new Vector3(.5, .5, .5), new Vector3(1.5, 1.5, 1.5),
                               new RayTracer.SolidMaterial(RGBA_Floats.Green, .01, 0.0, 2.0));

            List<RayTracer.IRayTraceable> subtractShapes = new List<RayTracer.IRayTraceable>();
            RayTracer.SolidMaterial material = new RayTracer.SolidMaterial(RGBA_Floats.Red, 0, 0, 0);
            subtractShapes.Add(new BoxShape(new Vector3(), new Vector3(1, 1, 1), material));

            RayTracer.IRayTraceable subtractGroup = RayTracer.BoundingVolumeHierarchy.CreateNewHierachy(subtractShapes);
            Difference merge = new Difference(box1, subtractGroup);

            renderCollection.Add(merge);
        }
        private void AddBoxAndSheresBooleanTest()
        {
            RayTracer.BoxShape box1 = new RayTracer.BoxShape(new Vector3(.5, .5, .5), new Vector3(1.5, 1.5, 1.5),
                               new RayTracer.SolidMaterial(RGBA_Floats.Green, 0, 0, 0));//.01, 0.0, 2.0));

            List<RayTracer.IRayTraceable> subtractShapes = new List<RayTracer.IRayTraceable>();
            RayTracer.SolidMaterial material = new RayTracer.SolidMaterial(RGBA_Floats.Red, 0, 0, 0);

#if true
            // two big spheres.  Looks good.
            subtractShapes.Add(new RayTracer.SphereShape(new Vector3(.5, .5, 1), .6, material));
            subtractShapes.Add(new RayTracer.SphereShape(new Vector3(1.5, .5, 1), .6, material));

            Transform cylinder = new Transform(new RayTracer.CylinderShape(.1, 3, material));
            cylinder.MoveToAbsolute(1, 1, 1);
            cylinder.RotateRelative(.1, .6, .6);
            //subtractShapes.Add(cylinder);
            //renderCollection.Add(cylinder);
#else
            for (int z = 0; z < 6; z++)
            {
                for (int y = 0; y < 6; y++)
                {
                    for (int x = 0; x < 6; x++)
                    {
                        subtractShapes.Add(new SphereShape(new Vector3(x * .2 + .5, y * .2 + .5, z * .2 + .5), .1, material));
                        //subtractShapes.Add(new SphereShape(new Vector3(x * .2 + .5, y * .2 + .5, z * .2 + .5), .13, material));
                    }
                }
            }
#endif


            IRayTraceable subtractGroup = BoundingVolumeHierarchy.CreateNewHierachy(subtractShapes);
            Difference merge = new Difference(box1, subtractGroup);

            renderCollection.Add(merge);
        }