public void NormalsAreNormalized() { var s = new TestGeometry(); var n = s.NormalAt(new Point(MathF.Sqrt(3f) / 3f, MathF.Sqrt(3f) / 3f, MathF.Sqrt(3f) / 3f), new Intersection(1f, s)); (n == n.Normalize()).Should().BeTrue(); }
public void CanChangeTransform() { var s = new TestGeometry(); var t = Transform.Translate(2, 3, 4); s.SetTransform(t); s.Transform.Should().Be(t); }
public void AddingChildToGroupAssignsGroupAsParent() { var g = new Group(); var s = new TestGeometry(); g.AddChild(s); s.Parent.Should().Be(g); g.Children.Should().OnlyContain(c => c == s); }
public void NormalOnTransformedShape() { var s = new TestGeometry(); s.SetTransform(Transform.Scale(1f, 0.5f, 1f) * Transform.RotateZ(MathF.PI / 5f)); var n = s.NormalAt(new Point(0, MathF.Sqrt(2f) / 2f, -MathF.Sqrt(2f) / 2f), new Intersection(1f, s)); n.Should().Be(new Normal(0, 0.97014f, -0.24254f)); }
public void NormalOnTranslatedShape() { var s = new TestGeometry(); s.SetTransform(Transform.Translate(0, 1, 0)); var n = s.NormalAt(new Point(0, 1.70711f, -0.70711f), new Intersection(1f, s)); n.Should().Be(new Normal(0, 0.70711f, -0.70711f)); }
public void IntersectTestChildrenIfRayHitsBounds() { var c = new TestGeometry(); var g = new Group(); g.AddChild(c); var r = new Ray(new Point(0, 0, -5), new Vector(0, 0, 1)); var xs = g.Intersects(r); // Child tested so SavedRay in not default. c.SavedRay.Should().NotBe(new Ray()); }
public void IntersectDoesNotTestChildrenIfRayMissesBounds() { var c = new TestGeometry(); var g = new Group(); g.AddChild(c); var r = new Ray(new Point(0, 0, -5), new Vector(0, 1, 0)); var xs = g.Intersects(r); // Child not tested so SavedRay remains default. c.SavedRay.Should().Be(new Ray()); }
public void IntersectTestChildrenIfRayHitsBounds() { var l = new TestGeometry(); var r = new TestGeometry(); var s = new ConstructiveSolid(ConstructiveOp.Difference, l, r); var ray = new Ray(new Point(0, 0, -5), new Vector(0, 0, 1)); var xs = s.Intersects(ray); // Child tested so SavedRay in not default. l.SavedRay.Should().NotBe(new Ray()); r.SavedRay.Should().NotBe(new Ray()); }
public void IntersectDoesNotTestChildrenIfRayMissesBounds() { var l = new TestGeometry(); var r = new TestGeometry(); var s = new ConstructiveSolid(ConstructiveOp.Difference, l, r); var ray = new Ray(new Point(0, 0, -5), new Vector(0, 1, 0)); var xs = s.Intersects(ray); // Child not tested so SavedRay remains default. l.SavedRay.Should().Be(new Ray()); r.SavedRay.Should().Be(new Ray()); }
public void IntersectingTranslatedShapeWithRay() { var r = new Ray(new Point(0, 0, -5), new Vector(0, 0, 1)); var s = new TestGeometry(); var t = Transform.Translate(5, 0, 0); s.SetTransform(t); // ReSharper disable once UnusedVariable var xs = s.Intersects(r); s.SavedRay.Origin.Should().Be(new Point(-5, 0, -5f)); s.SavedRay.Direction.Should().Be(new Vector(0, 0, 1f)); }
public void DefaultTransformIsIdentity() { var s = new TestGeometry(); s.Transform.Should().Be(Transform.Identity); }
public void HasNoParentByDefault() { var s = new TestGeometry(); s.Parent.Should().BeNull(); }
public void IsShape() { var s = new TestGeometry(); s.Should().BeAssignableTo <IGeometry>(); }