--- a/gfx/tests/gtest/TestBSPTree.cpp
+++ b/gfx/tests/gtest/TestBSPTree.cpp
@@ -6,29 +6,33 @@
#include "BSPTree.h"
#include "Polygon.h"
#include "gtest/gtest.h"
#include <deque>
using mozilla::layers::BSPTree;
+using mozilla::layers::LayerPolygon;
using mozilla::gfx::Point3D;
using mozilla::gfx::Polygon3D;
-namespace
-{
+namespace {
// Compares two points while allowing some numerical inaccuracy.
-static bool FuzzyCompare(const Point3D& lhs, const Point3D& rhs)
+static bool FuzzyEquals(const Point3D& lhs, const Point3D& rhs)
{
const float epsilon = 0.001f;
const Point3D d = lhs - rhs;
- return (abs(d.x) > epsilon || abs(d.y) > epsilon || abs(d.z) > epsilon);
+ // The absolute difference between the points should be less than
+ // epsilon for every component.
+ return std::abs(d.x) < epsilon &&
+ std::abs(d.y) < epsilon &&
+ std::abs(d.z) < epsilon;
}
// Compares the points of two polygons and ensures
// that the points are in the same winding order.
static bool operator==(const Polygon3D& lhs, const Polygon3D& rhs)
{
const nsTArray<Point3D>& left = lhs.GetPoints();
const nsTArray<Point3D>& right = rhs.GetPoints();
@@ -39,52 +43,124 @@ static bool operator==(const Polygon3D&
}
const size_t pointCount = left.Length();
// Find the first vertex of the first polygon from the second polygon.
// This assumes that the polygons do not contain duplicate vertices.
int start = -1;
for (size_t i = 0; i < pointCount; ++i) {
- if (FuzzyCompare(left[0], right[i])) {
+ if (FuzzyEquals(left[0], right[i])) {
start = i;
break;
}
}
// Found at least one different vertex.
if (start == -1) {
return false;
}
// Verify that the polygons have the same points.
for (size_t i = 0; i < pointCount; ++i) {
size_t j = (start + i) % pointCount;
- if (!FuzzyCompare(left[i], right[j])) {
+ if (!FuzzyEquals(left[i], right[j])) {
return false;
}
}
return true;
}
static void RunTest(std::deque<Polygon3D> aPolygons,
std::deque<Polygon3D> aExpected)
{
- const BSPTree tree(aPolygons);
- const nsTArray<Polygon3D> order = tree.GetDrawOrder();
+ std::deque<LayerPolygon> layers;
+ for (Polygon3D& polygon : aPolygons) {
+ layers.push_back(LayerPolygon(std::move(polygon), nullptr));
+ }
- EXPECT_EQ(order.Length(), aExpected.size());
+ const BSPTree tree(layers);
+ const nsTArray<LayerPolygon> order = tree.GetDrawOrder();
+
+ EXPECT_EQ(aExpected.size(), order.Length());
for (size_t i = 0; i < order.Length(); ++i) {
- EXPECT_TRUE(order[i] == aExpected[i]);
+ EXPECT_TRUE(aExpected[i] == *order[i].geometry);
}
}
+} // namespace
+
+TEST(BSPTree, TestSanity)
+{
+ EXPECT_TRUE(FuzzyEquals(Point3D(0.0f, 0.0f, 0.0f),
+ Point3D(0.0f, 0.0f, 0.0f)));
+
+ EXPECT_TRUE(FuzzyEquals(Point3D(0.0f, 0.0f, 0.0f),
+ Point3D(0.00001f, 0.00001f, 0.00001f)));
+
+ EXPECT_TRUE(FuzzyEquals(Point3D(0.00001f, 0.00001f, 0.00001f),
+ Point3D(0.0f, 0.0f, 0.0f)));
+
+ EXPECT_FALSE(FuzzyEquals(Point3D(0.0f, 0.0f, 0.0f),
+ Point3D(0.01f, 0.01f, 0.01f)));
+
+ EXPECT_FALSE(FuzzyEquals(Point3D(0.01f, 0.01f, 0.01f),
+ Point3D(0.0f, 0.0f, 0.0f)));
+
+ Polygon3D p1 {
+ Point3D(0.0f, 0.0f, 1.0f),
+ Point3D(1.0f, 0.0f, 1.0f),
+ Point3D(1.0f, 1.0f, 1.0f),
+ Point3D(0.0f, 1.0f, 1.0f)
+ };
+
+ // Same points as above shifted forward by one position.
+ Polygon3D shifted {
+ Point3D(0.0f, 1.0f, 1.0f),
+ Point3D(0.0f, 0.0f, 1.0f),
+ Point3D(1.0f, 0.0f, 1.0f),
+ Point3D(1.0f, 1.0f, 1.0f)
+ };
+
+ Polygon3D p2 {
+ Point3D(0.00001f, 0.00001f, 1.00001f),
+ Point3D(1.00001f, 0.00001f, 1.00001f),
+ Point3D(1.00001f, 1.00001f, 1.00001f),
+ Point3D(0.00001f, 1.00001f, 1.00001f)
+ };
+
+ Polygon3D p3 {
+ Point3D(0.01f, 0.01f, 1.01f),
+ Point3D(1.01f, 0.01f, 1.01f),
+ Point3D(1.01f, 1.01f, 1.01f),
+ Point3D(0.01f, 1.01f, 1.01f)
+ };
+
+ // Trivial equals
+ EXPECT_TRUE(p1 == p1);
+ EXPECT_TRUE(p2 == p2);
+ EXPECT_TRUE(p3 == p3);
+ EXPECT_TRUE(shifted == shifted);
+
+ // Polygons with the same point order
+ EXPECT_TRUE(p1 == p2);
+ EXPECT_TRUE(p1 == shifted);
+
+ // Polygons containing different points
+ EXPECT_FALSE(p1 == p3);
+ EXPECT_FALSE(p2 == p3);
+ EXPECT_FALSE(shifted == p3);
+
+ ::RunTest({p1}, {p1});
+ ::RunTest({p2}, {p2});
+ ::RunTest({p1}, {p2});
+ ::RunTest({p1}, {shifted});
}
TEST(BSPTree, SameNode)
{
const std::deque<Polygon3D> polygons {
Polygon3D {
Point3D(0.0f, 0.0f, 0.0f),
Point3D(1.0f, 0.0f, 0.0f),
@@ -113,18 +189,18 @@ TEST(BSPTree, OneChild)
const Polygon3D p2 {
Point3D(0.0f, 0.0f, 1.0f),
Point3D(1.0f, 0.0f, 1.0f),
Point3D(1.0f, 1.0f, 1.0f),
Point3D(0.0f, 1.0f, 1.0f)
};
- ::RunTest(std::deque<Polygon3D> {p1, p2}, {p1, p2});
- ::RunTest(std::deque<Polygon3D> {p2, p1}, {p1, p2});
+ ::RunTest({p1, p2}, {p1, p2});
+ ::RunTest({p2, p1}, {p1, p2});
}
TEST(BSPTree, SplitSimple1)
{
Polygon3D p1 {
Point3D(0.0f, 0.0f, 1.0f),
Point3D(1.0f, 0.0f, 1.0f),
Point3D(1.0f, 1.0f, 1.0f),
@@ -269,124 +345,16 @@ TEST(BSPTree, NoSplit2) {
Point3D(-5.00000f, 5.00000f, 0.00000f),
Point3D(5.00000f, 5.00000f, 0.00000f),
Point3D(5.00000f, -5.00000f, 0.00000f)
}
};
::RunTest(polygons, expected);
}
-TEST(BSPTree, SplitComplex1) {
- const std::deque<Polygon3D> polygons {
- Polygon3D {
- Point3D(0.00000f, -5.00000f, -15.00000f),
- Point3D(0.00000f, 5.00000f, -15.00000f),
- Point3D(0.00000f, 5.00000f, -10.00000f),
- Point3D(0.00000f, -5.00000f, -10.00000f)
- },
- Polygon3D {
- Point3D(-5.00000f, -5.00000f, 0.00000f),
- Point3D(-5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, -5.00000f, 0.00000f)
- }
- };
-
- const std::deque<Polygon3D> expected {
- Polygon3D {
- Point3D(0.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, -5.00000f, 0.00000f),
- Point3D(0.00000f, -5.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, -5.00000f, -15.00000f),
- Point3D(0.00000f, 5.00000f, -15.00000f),
- Point3D(0.00000f, 5.00000f, -10.00000f),
- Point3D(0.00000f, -5.00000f, -10.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, -5.00000f, 0.00000f),
- Point3D(-5.00000f, -5.00000f, 0.00000f),
- Point3D(-5.00000f, 5.00000f, 0.00000f),
- Point3D(0.00000f, 5.00000f, 0.00000f)
- }
- };
- ::RunTest(polygons, expected);
-}
-
-TEST(BSPTree, SplitComplex2) {
- const std::deque<Polygon3D> polygons {
- Polygon3D {
- Point3D(-5.00000f, -5.00000f, 0.00000f),
- Point3D(-5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, -5.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, -5.00000f, -5.00000f),
- Point3D(0.00000f, 5.00000f, -5.00000f),
- Point3D(0.00000f, 5.00000f, 5.00000f),
- Point3D(0.00000f, -5.00000f, 5.00000f)
- },
- Polygon3D {
- Point3D(-5.00000f, 0.00000f, -5.00000f),
- Point3D(-5.00000f, 0.00000f, 5.00000f),
- Point3D(5.00000f, 0.00000f, 5.00000f),
- Point3D(5.00000f, 0.00000f, -5.00000f)
- }
- };
-
- const std::deque<Polygon3D> expected {
- Polygon3D {
- Point3D(0.00000f, 0.00000f, 0.00000f),
- Point3D(5.00000f, 0.00000f, 0.00000f),
- Point3D(5.00000f, 0.00000f, -5.00000f),
- Point3D(0.00000f, 0.00000f, -5.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, -5.00000f, 0.00000f),
- Point3D(0.00000f, -5.00000f, -5.00000f),
- Point3D(0.00000f, 5.00000f, -5.00000f),
- Point3D(0.00000f, 5.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 0.00000f, -5.00000f),
- Point3D(-5.00000f, 0.00000f, -5.00000f),
- Point3D(-5.00000f, 0.00000f, 0.00000f),
- Point3D(0.00000f, 0.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(-5.00000f, -5.00000f, 0.00000f),
- Point3D(-5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, 5.00000f, 0.00000f),
- Point3D(5.00000f, -5.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 0.00000f, 5.00000f),
- Point3D(5.00000f, 0.00000f, 5.00000f),
- Point3D(5.00000f, 0.00000f, 0.00000f),
- Point3D(0.00000f, 0.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 5.00000f, 0.00000f),
- Point3D(0.00000f, 5.00000f, 5.00000f),
- Point3D(0.00000f, -5.00000f, 5.00000f),
- Point3D(0.00000f, -5.00000f, 0.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 0.00000f, 0.00000f),
- Point3D(-5.00000f, 0.00000f, 0.00000f),
- Point3D(-5.00000f, 0.00000f, 5.00000f),
- Point3D(0.00000f, 0.00000f, 5.00000f)
- }
- };
- ::RunTest(polygons, expected);
-}
-
TEST(BSPTree, TwoPlaneIntersectRotate0degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
Point3D(-0.00000f, 2.00000f, 2.00000f),
Point3D(-0.00000f, -2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, -2.00000f)
},
@@ -395,32 +363,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate0de
Point3D(2.00000f, -0.00000f, -2.00000f),
Point3D(-2.00000f, 0.00000f, -2.00000f),
Point3D(-2.00000f, 0.00010f, 2.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 0.00000f, -2.00000f),
+ Point3D(2.00000f, 0.00000f, 2.00000f),
+ Point3D(2.00000f, -0.00000f, -2.00000f),
Point3D(-2.00000f, 0.00000f, -2.00000f),
- Point3D(-2.00000f, 0.00010f, 2.00000f),
- Point3D(0.00000f, 0.00005f, 2.00000f)
+ Point3D(-2.00000f, 0.00010f, 2.00000f)
},
Polygon3D {
Point3D(-0.00000f, 2.00000f, 2.00000f),
Point3D(-0.00000f, -2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, -2.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 0.00005f, 2.00000f),
- Point3D(2.00000f, 0.00000f, 2.00000f),
- Point3D(2.00000f, -0.00000f, -2.00000f),
- Point3D(0.00010f, 0.00000f, -2.00000f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate20degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -434,32 +396,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate20d
Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, -0.68400f, 1.87940f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00000f, -0.68400f, 1.87940f)
+ Point3D(-2.00000f, -0.68400f, 1.87940f)
},
Polygon3D {
Point3D(-0.00000f, 1.19540f, 2.56350f),
Point3D(-0.00000f, -2.56340f, 1.19540f),
Point3D(0.00010f, -1.19530f, -2.56340f),
Point3D(0.00010f, 2.56350f, -1.19530f)
- },
- Polygon3D {
- Point3D(0.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00010f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate40degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -473,32 +429,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate40d
Point3D(2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, -1.73200f, 1.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 1.73210f, -0.99990f),
+ Point3D(2.00000f, -1.73200f, 1.00000f),
+ Point3D(2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, 1.73210f, -0.99990f),
- Point3D(-2.00000f, -1.73200f, 1.00000f),
- Point3D(0.00000f, -1.73200f, 1.00000f)
+ Point3D(-2.00000f, -1.73200f, 1.00000f)
},
Polygon3D {
Point3D(-0.00000f, -0.73200f, 2.73210f),
Point3D(-0.00000f, -2.73200f, -0.73200f),
Point3D(0.00010f, 0.73210f, -2.73200f),
Point3D(0.00010f, 2.73210f, 0.73210f)
- },
- Polygon3D {
- Point3D(0.00000f, -1.73200f, 1.00000f),
- Point3D(2.00000f, -1.73200f, 1.00000f),
- Point3D(2.00000f, 1.73210f, -0.99990f),
- Point3D(0.00010f, 1.73210f, -0.99990f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate60degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -512,32 +462,32 @@ TEST(BSPTree, TwoPlaneIntersectRotate60d
Point3D(2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, -1.73200f, -1.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, -1.73200f, -1.00000f),
+ Point3D(-2.00000f, 1.26793f, 0.73210f),
+ Point3D(-2.00000f, -1.73200f, -1.00000f),
Point3D(2.00000f, -1.73200f, -1.00000f),
- Point3D(2.00000f, 1.73210f, 1.00010f),
- Point3D(0.00010f, 1.73210f, 1.00010f)
+ Point3D(2.00000f, 1.26793f, 0.73210f)
},
Polygon3D {
Point3D(-0.00000f, -2.73200f, 0.73210f),
Point3D(-0.00000f, -0.73200f, -2.73200f),
Point3D(0.00010f, 2.73210f, -0.73200f),
Point3D(0.00010f, 0.73210f, 2.73210f)
},
Polygon3D {
- Point3D(0.00010f, 1.73210f, 1.00010f),
+ Point3D(2.00000f, 1.26793f, 0.73210f),
+ Point3D(2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, 1.73210f, 1.00010f),
- Point3D(-2.00000f, -1.73200f, -1.00000f),
- Point3D(0.00000f, -1.73200f, -1.00000f)
+ Point3D(-2.00000f, 1.26793f, 0.73210f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate80degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -551,32 +501,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate80d
Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00010f, -0.68400f, 1.87940f)
- },
- Polygon3D {
Point3D(-0.00000f, -1.19530f, -2.56340f),
Point3D(-0.00000f, 2.56350f, -1.19530f),
Point3D(0.00010f, 1.19540f, 2.56350f),
Point3D(0.00010f, -2.56340f, 1.19540f)
},
Polygon3D {
- Point3D(0.00010f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00000f, 0.68410f, -1.87930f)
+ Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate100degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -590,32 +534,32 @@ TEST(BSPTree, TwoPlaneIntersectRotate100
Point3D(2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, 1.73210f, 1.00010f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, -1.73200f, -1.00000f),
+ Point3D(2.00000f, -1.26783f, -0.73200f),
+ Point3D(2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, -1.73200f, -1.00000f),
- Point3D(-2.00000f, 1.73210f, 1.00010f),
- Point3D(0.00000f, 1.73210f, 1.00010f)
+ Point3D(-2.00000f, -1.26783f, -0.73200f)
},
Polygon3D {
Point3D(-0.00000f, 2.73210f, -0.73200f),
Point3D(-0.00000f, 0.73210f, 2.73210f),
Point3D(0.00010f, -2.73200f, 0.73210f),
Point3D(0.00010f, -0.73200f, -2.73200f)
},
Polygon3D {
- Point3D(0.00000f, 1.73210f, 1.00010f),
+ Point3D(-2.00000f, -1.26783f, -0.73200f),
+ Point3D(-2.00000f, 1.73210f, 1.00010f),
Point3D(2.00000f, 1.73210f, 1.00010f),
- Point3D(2.00000f, -1.73200f, -1.00000f),
- Point3D(0.00010f, -1.73200f, -1.00000f)
+ Point3D(2.00000f, -1.26783f, -0.73200f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate120degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -629,32 +573,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate120
Point3D(2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, -1.73200f, 1.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 1.73210f, -0.99990f),
+ Point3D(2.00000f, -1.73200f, 1.00000f),
+ Point3D(2.00000f, 1.73210f, -0.99990f),
Point3D(-2.00000f, 1.73210f, -0.99990f),
- Point3D(-2.00000f, -1.73200f, 1.00000f),
- Point3D(0.00000f, -1.73200f, 1.00000f)
+ Point3D(-2.00000f, -1.73200f, 1.00000f)
},
Polygon3D {
Point3D(-0.00000f, -0.73200f, 2.73210f),
Point3D(-0.00000f, -2.73200f, -0.73200f),
Point3D(0.00010f, 0.73210f, -2.73200f),
Point3D(0.00010f, 2.73210f, 0.73210f)
- },
- Polygon3D {
- Point3D(0.00000f, -1.73200f, 1.00000f),
- Point3D(2.00000f, -1.73200f, 1.00000f),
- Point3D(2.00000f, 1.73210f, -0.99990f),
- Point3D(0.00010f, 1.73210f, -0.99990f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate140degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -668,32 +606,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate140
Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00010f, -0.68400f, 1.87940f)
- },
- Polygon3D {
Point3D(-0.00000f, -1.19530f, -2.56340f),
Point3D(-0.00000f, 2.56350f, -1.19530f),
Point3D(0.00010f, 1.19540f, 2.56350f),
Point3D(0.00010f, -2.56340f, 1.19540f)
},
Polygon3D {
- Point3D(0.00010f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00000f, 0.68410f, -1.87930f)
+ Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate160degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -707,32 +639,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate160
Point3D(2.00000f, 0.00010f, -2.00000f),
Point3D(-2.00000f, 0.00010f, -2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 0.00010f, -2.00000f),
+ Point3D(2.00000f, -0.00000f, 2.00000f),
+ Point3D(2.00000f, 0.00010f, -2.00000f),
Point3D(-2.00000f, 0.00010f, -2.00000f),
- Point3D(-2.00000f, -0.00000f, 2.00000f),
- Point3D(0.00000f, 0.00000f, 2.00000f)
+ Point3D(-2.00000f, -0.00000f, 2.00000f)
},
Polygon3D {
Point3D(-0.00000f, 2.00000f, 2.00000f),
Point3D(-0.00000f, -2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, -2.00000f)
- },
- Polygon3D {
- Point3D(0.00000f, 0.00000f, 2.00000f),
- Point3D(2.00000f, -0.00000f, 2.00000f),
- Point3D(2.00000f, 0.00010f, -2.00000f),
- Point3D(0.00010f, 0.00010f, -2.00000f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate180degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -746,32 +672,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate180
Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, -0.00000f, 2.00000f),
- Point3D(0.00010f, 0.00000f, 2.00000f)
- },
- Polygon3D {
Point3D(-0.00000f, -2.00000f, -2.00000f),
Point3D(-0.00000f, 2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, 2.00000f)
},
Polygon3D {
- Point3D(0.00010f, 0.00000f, 2.00000f),
+ Point3D(2.00000f, 0.00010f, -2.00000f),
+ Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
- Point3D(-2.00000f, 0.00010f, -2.00000f),
- Point3D(0.00000f, 0.00010f, -2.00000f)
+ Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate200degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -785,32 +705,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate200
Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, -0.68400f, 1.87940f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00000f, -0.68400f, 1.87940f)
+ Point3D(-2.00000f, -0.68400f, 1.87940f)
},
Polygon3D {
Point3D(-0.00000f, 1.19540f, 2.56350f),
Point3D(-0.00000f, -2.56340f, 1.19540f),
Point3D(0.00010f, -1.19530f, -2.56340f),
Point3D(0.00010f, 2.56350f, -1.19530f)
- },
- Polygon3D {
- Point3D(0.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00010f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate220degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -824,32 +738,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate220
Point3D(2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, 1.73210f, -0.99990f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 1.73210f, -0.99990f),
- Point3D(2.00000f, 1.73210f, -0.99990f),
- Point3D(2.00000f, -1.73200f, 1.00000f),
- Point3D(0.00010f, -1.73200f, 1.00000f)
- },
- Polygon3D {
Point3D(-0.00000f, 0.73210f, -2.73200f),
Point3D(-0.00000f, 2.73210f, 0.73210f),
Point3D(0.00010f, -0.73200f, 2.73210f),
Point3D(0.00010f, -2.73200f, -0.73200f)
},
Polygon3D {
- Point3D(0.00010f, -1.73200f, 1.00000f),
+ Point3D(2.00000f, 1.73210f, -0.99990f),
+ Point3D(2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, -1.73200f, 1.00000f),
- Point3D(-2.00000f, 1.73210f, -0.99990f),
- Point3D(0.00000f, 1.73210f, -0.99990f)
+ Point3D(-2.00000f, 1.73210f, -0.99990f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate240degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -863,32 +771,32 @@ TEST(BSPTree, TwoPlaneIntersectRotate240
Point3D(2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, -1.73200f, -1.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, -1.73200f, -1.00000f),
+ Point3D(-2.00000f, 1.26793f, 0.73210f),
+ Point3D(-2.00000f, -1.73200f, -1.00000f),
Point3D(2.00000f, -1.73200f, -1.00000f),
- Point3D(2.00000f, 1.73210f, 1.00010f),
- Point3D(0.00010f, 1.73210f, 1.00010f)
+ Point3D(2.00000f, 1.26793f, 0.73210f)
},
Polygon3D {
Point3D(-0.00000f, -2.73200f, 0.73210f),
Point3D(-0.00000f, -0.73200f, -2.73200f),
Point3D(0.00010f, 2.73210f, -0.73200f),
Point3D(0.00010f, 0.73210f, 2.73210f)
},
Polygon3D {
- Point3D(0.00010f, 1.73210f, 1.00010f),
+ Point3D(2.00000f, 1.26793f, 0.73210f),
+ Point3D(2.00000f, 1.73210f, 1.00010f),
Point3D(-2.00000f, 1.73210f, 1.00010f),
- Point3D(-2.00000f, -1.73200f, -1.00000f),
- Point3D(0.00000f, -1.73200f, -1.00000f)
+ Point3D(-2.00000f, 1.26793f, 0.73210f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate260degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -902,32 +810,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate260
Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, -0.68400f, 1.87940f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00000f, -0.68400f, 1.87940f)
+ Point3D(-2.00000f, -0.68400f, 1.87940f)
},
Polygon3D {
Point3D(-0.00000f, 1.19540f, 2.56350f),
Point3D(-0.00000f, -2.56340f, 1.19540f),
Point3D(0.00010f, -1.19530f, -2.56340f),
Point3D(0.00010f, 2.56350f, -1.19530f)
- },
- Polygon3D {
- Point3D(0.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00010f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate280degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -941,32 +843,32 @@ TEST(BSPTree, TwoPlaneIntersectRotate280
Point3D(2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, 1.73210f, 1.00010f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00010f, -1.73200f, -1.00000f),
+ Point3D(2.00000f, -1.26783f, -0.73200f),
+ Point3D(2.00000f, -1.73200f, -1.00000f),
Point3D(-2.00000f, -1.73200f, -1.00000f),
- Point3D(-2.00000f, 1.73210f, 1.00010f),
- Point3D(0.00000f, 1.73210f, 1.00010f)
+ Point3D(-2.00000f, -1.26783f, -0.73200f)
},
Polygon3D {
Point3D(-0.00000f, 2.73210f, -0.73200f),
Point3D(-0.00000f, 0.73210f, 2.73210f),
Point3D(0.00010f, -2.73200f, 0.73210f),
Point3D(0.00010f, -0.73200f, -2.73200f)
},
Polygon3D {
- Point3D(0.00000f, 1.73210f, 1.00010f),
+ Point3D(-2.00000f, -1.26783f, -0.73200f),
+ Point3D(-2.00000f, 1.73210f, 1.00010f),
Point3D(2.00000f, 1.73210f, 1.00010f),
- Point3D(2.00000f, -1.73200f, -1.00000f),
- Point3D(0.00010f, -1.73200f, -1.00000f)
+ Point3D(2.00000f, -1.26783f, -0.73200f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate300degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -980,32 +882,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate300
Point3D(2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, 1.73210f, -0.99990f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 1.73210f, -0.99990f),
- Point3D(2.00000f, 1.73210f, -0.99990f),
- Point3D(2.00000f, -1.73200f, 1.00000f),
- Point3D(0.00010f, -1.73200f, 1.00000f)
- },
- Polygon3D {
Point3D(-0.00000f, 0.73210f, -2.73200f),
Point3D(-0.00000f, 2.73210f, 0.73210f),
Point3D(0.00010f, -0.73200f, 2.73210f),
Point3D(0.00010f, -2.73200f, -0.73200f)
},
Polygon3D {
- Point3D(0.00010f, -1.73200f, 1.00000f),
+ Point3D(2.00000f, 1.73210f, -0.99990f),
+ Point3D(2.00000f, -1.73200f, 1.00000f),
Point3D(-2.00000f, -1.73200f, 1.00000f),
- Point3D(-2.00000f, 1.73210f, -0.99990f),
- Point3D(0.00000f, 1.73210f, -0.99990f)
+ Point3D(-2.00000f, 1.73210f, -0.99990f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate320degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -1019,32 +915,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate320
Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, 0.68410f, -1.87930f),
- Point3D(2.00000f, -0.68400f, 1.87940f),
- Point3D(0.00010f, -0.68400f, 1.87940f)
- },
- Polygon3D {
Point3D(-0.00000f, -1.19530f, -2.56340f),
Point3D(-0.00000f, 2.56350f, -1.19530f),
Point3D(0.00010f, 1.19540f, 2.56350f),
Point3D(0.00010f, -2.56340f, 1.19540f)
},
Polygon3D {
- Point3D(0.00010f, -0.68400f, 1.87940f),
+ Point3D(2.00000f, 0.68410f, -1.87930f),
+ Point3D(2.00000f, -0.68400f, 1.87940f),
Point3D(-2.00000f, -0.68400f, 1.87940f),
- Point3D(-2.00000f, 0.68410f, -1.87930f),
- Point3D(0.00000f, 0.68410f, -1.87930f)
+ Point3D(-2.00000f, 0.68410f, -1.87930f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate340degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -1058,32 +948,26 @@ TEST(BSPTree, TwoPlaneIntersectRotate340
Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, -0.00000f, 2.00000f),
- Point3D(0.00010f, 0.00000f, 2.00000f)
- },
- Polygon3D {
Point3D(-0.00000f, -2.00000f, -2.00000f),
Point3D(-0.00000f, 2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, 2.00000f)
},
Polygon3D {
- Point3D(0.00010f, 0.00000f, 2.00000f),
+ Point3D(2.00000f, 0.00010f, -2.00000f),
+ Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
- Point3D(-2.00000f, 0.00010f, -2.00000f),
- Point3D(0.00000f, 0.00010f, -2.00000f)
+ Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
::RunTest(polygons, expected);
}
TEST(BSPTree, TwoPlaneIntersectRotate360degrees) {
const std::deque<Polygon3D> polygons {
Polygon3D {
@@ -1097,28 +981,22 @@ TEST(BSPTree, TwoPlaneIntersectRotate360
Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
const std::deque<Polygon3D> expected {
Polygon3D {
- Point3D(0.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, 0.00010f, -2.00000f),
- Point3D(2.00000f, -0.00000f, 2.00000f),
- Point3D(0.00010f, 0.00000f, 2.00000f)
- },
- Polygon3D {
Point3D(-0.00000f, -2.00000f, -2.00000f),
Point3D(-0.00000f, 2.00000f, -2.00000f),
Point3D(0.00010f, 2.00000f, 2.00000f),
Point3D(0.00010f, -2.00000f, 2.00000f)
},
Polygon3D {
- Point3D(0.00010f, 0.00000f, 2.00000f),
+ Point3D(2.00000f, 0.00010f, -2.00000f),
+ Point3D(2.00000f, -0.00000f, 2.00000f),
Point3D(-2.00000f, -0.00000f, 2.00000f),
- Point3D(-2.00000f, 0.00010f, -2.00000f),
- Point3D(0.00000f, 0.00010f, -2.00000f)
+ Point3D(-2.00000f, 0.00010f, -2.00000f)
}
};
::RunTest(polygons, expected);
}