public void IntersectingRayGrouTestChildrenIfBoxHit()
        {
            var child = new shape.TestShape();
            var shape = new shape.Group();

            shape.Add(child);
            var r = new Ray(pt.Point(0, 0, -5), pt.Vector(0, 0, 1));

            _ = shape.Intersect(r);
            Assert.NotNull(child.SavedRay);
        }
Beispiel #2
0
        public void IntersectingRayWithNonemptyGroup()
        {
            var g  = new shape.Group();
            var s1 = new shape.Sphere();
            var s2 = new shape.Sphere(transform.Translation(0, 0, -3));
            var s3 = new shape.Sphere(transform.Translation(5, 0, 0));

            g.Add(s1);
            g.Add(s2);
            g.Add(s3);

            var r  = new Ray(pt.Point(0, 0, -5), pt.Vector(0, 0, 1));
            var xs = g.Intersect(r);

            Assert.Equal(4, xs.Count());
            Assert.Equal(s2, xs[0].Object);
            Assert.Equal(s2, xs[1].Object);
            Assert.Equal(s1, xs[2].Object);
            Assert.Equal(s1, xs[3].Object);
        }
Beispiel #3
0
        public void AddingChildToGroup()
        {
            var g = new shape.Group();
            var s = new shape.TestShape();

            g.Add(s);

            Assert.NotEmpty(g.Children);
            Assert.Contains(s, g.Children);
            Assert.Equal(g, s.Parent);
        }
        private shapes.Group Hexagon()
        {
            var hex = new shapes.Group();

            for (int i = 0; i <= 5; i++)
            {
                var side = HexagonSide();
                side.Transform = transform.RotationY(i * Math.PI / 3);
                hex.Add(side);
            }
            return(hex);
        }
Beispiel #5
0
        public void IntersectingATransformedGroup()
        {
            var g = new shape.Group(transform.Scaling(2, 2, 2));
            var s = new shape.Sphere(transform.Translation(5, 0, 0));

            g.Add(s);

            var r  = new Ray(pt.Point(10, 0, -10), pt.Vector(0, 0, 1));
            var xs = g.Intersect(r);

            Assert.Equal(2, xs.Count());
        }
        public void GroupHasBoundingBoxContainsItsChildren()
        {
            var s = new shape.Sphere()
            {
                Transform = transform.Translation(2, 5, -3) * transform.Scaling(2, 2, 2)
            };
            var c = new shape.Cylinder()
            {
                Minimum   = -2,
                Maximum   = 2,
                Transform = transform.Translation(-4, -1, 4) * transform.Scaling(0.5, 1, 0.5)
            };
            var shape = new shape.Group();

            shape.Add(s);
            shape.Add(c);

            var box = shape.Bounds();

            Assert.Equal(pt.Point(-4.5, -3, -5), box.Minimum);
            Assert.Equal(pt.Point(4, 7, 4.5), box.Maximum);
        }
Beispiel #7
0
        public void FindingNormalOnChildObject()
        {
            var g1 = new shape.Group(transform.RotationY(Math.PI / 2));
            var g2 = new shape.Group(transform.Scaling(1, 2, 3));

            g1.Add(g2);
            var s = new shape.Sphere(transform.Translation(5, 0, 0));

            g2.Add(s);
            var n = s.NormalAt(pt.Point(1.7311, 1.1547, -5.5774));

            //TODO precision error
            CustomAssert.Equal(pt.Vector(0.2856, 0.4286, -0.8572), n, 4);
        }
Beispiel #8
0
        public void ConvertingNormalFromObjectToWorldSpace()
        {
            var g1 = new shape.Group(transform.RotationY(Math.PI / 2));
            var g2 = new shape.Group(transform.Scaling(1, 2, 3));

            g1.Add(g2);
            var s = new shape.Sphere(transform.Translation(5, 0, 0));

            g2.Add(s);
            var value = Math.Sqrt(3) / 3;
            var n     = s.NormalToWorld(pt.Vector(value, value, value));

            CustomAssert.Equal(pt.Vector(0.2857, 0.4286, -0.8571), n, 4);
        }
Beispiel #9
0
        public void ConvertingPointFromWorldToObjectSpace()
        {
            var g1 = new shape.Group(transform.RotationY(Math.PI / 2));
            var g2 = new shape.Group(transform.Scaling(2, 2, 2));

            g1.Add(g2);

            var s = new shape.Sphere(transform.Translation(5, 0, 0));

            g2.Add(s);

            var p = s.WorldToObject(pt.Point(-2, 0, -10));

            CustomAssert.Equal(pt.Point(0, 0, -1), p, 5);
        }
        public void PartitioningGroupChildren()
        {
            var s1 = new shape.Sphere(transform.Translation(-2, 0, 0));
            var s2 = new shape.Sphere(transform.Translation(2, 0, 0));
            var s3 = new shape.Sphere();
            var g  = new shape.Group();

            g.Add(new List <shape.Shape>()
            {
                s1, s2, s3
            });
            (List <shape.Shape> left, List <shape.Shape> right) = g.Partition();

            Assert.Equal(1, g.Count());
            Assert.Single(left);
            Assert.Equal(s1, left[0]);
            Assert.Single(right);
            Assert.Equal(s2, right[0]);
        }