worked on nav-mesh
added dijkstra support for nav mesh some minor changes to distributions minor fixes
This commit is contained in:
@@ -5,6 +5,70 @@
|
||||
#include "../../navMesh/NavMeshTriangle.h"
|
||||
using namespace NM;
|
||||
|
||||
|
||||
|
||||
|
||||
TEST(NavMeshTriangle, uv_2D_on_2D) {
|
||||
|
||||
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1); // flat triangle
|
||||
ASSERT_NEAR(0.5, t1.getArea(), 0.0001);
|
||||
|
||||
float u, v;
|
||||
|
||||
std::vector<float> testVals = {1.0,0.0, 0.0,1.0, 0.4,0.4, 0.8,0.1, 0.1,0.8, 0.3,0.6, 0.6,0.3};
|
||||
|
||||
// point -> uv -> point
|
||||
for (size_t i = 0; i < testVals.size(); i+=2) {
|
||||
Point2 pt1(testVals[i], testVals[i+1]);
|
||||
t1.getUV(pt1, u, v);
|
||||
Point3 pt2 = t1.getPoint(u,v);
|
||||
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
|
||||
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
TEST(NavMeshTriangle, uv_2D_on_3D) {
|
||||
|
||||
NavMeshTriangle t1(Point3(0,0,0), Point3(2,0,0), Point3(0,1,1), 1); // non-flat triangle
|
||||
|
||||
float u, v;
|
||||
|
||||
std::vector<float> testVals = {1.0,0.0, 0.0,1.0, 0.4,0.4, 0.8,0.1, 0.1,0.8, 0.3,0.6, 0.6,0.3};
|
||||
|
||||
// point -> uv -> point
|
||||
for (size_t i = 0; i < testVals.size(); i+=2) {
|
||||
Point2 pt1(testVals[i], testVals[i+1]);
|
||||
t1.getUV(pt1, u, v);
|
||||
Point3 pt2 = t1.getPoint(u,v);
|
||||
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
|
||||
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
TEST(NavMeshTriangle, uv_3D_on_3D) {
|
||||
|
||||
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,1), 1); // non-flat triangle
|
||||
|
||||
float u, v;
|
||||
|
||||
std::vector<float> testVals = {1.0,0.0,0.0, 0.0,1.0,1.0};
|
||||
|
||||
// point -> uv -> point
|
||||
for (size_t i = 0; i < testVals.size(); i+=3) {
|
||||
Point3 pt1(testVals[i], testVals[i+1], testVals[i+2]);
|
||||
t1.getUV(pt1, u, v);
|
||||
Point3 pt2 = t1.getPoint(u,v);
|
||||
ASSERT_NEAR(pt1.x, pt2.x, 0.0001);
|
||||
ASSERT_NEAR(pt1.y, pt2.y, 0.0001);
|
||||
ASSERT_NEAR(pt1.z, pt2.z, 0.0001);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TEST(NavMeshTriangle, contains) {
|
||||
|
||||
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1);
|
||||
@@ -31,6 +95,21 @@ TEST(NavMeshTriangle, area) {
|
||||
}
|
||||
|
||||
|
||||
TEST(NavMeshTriangle, interpolate) {
|
||||
|
||||
NavMeshTriangle t1(Point3(0,0,0), Point3(1,0,0), Point3(0,1,0), 1);
|
||||
|
||||
ASSERT_NEAR(1.0f, t1.interpolate(Point3(0,0,0), 1.0, 2.0, 3.0), 0.001);
|
||||
ASSERT_NEAR(2.0f, t1.interpolate(Point3(1,0,0), 1.0, 2.0, 3.0), 0.001);
|
||||
ASSERT_NEAR(3.0f, t1.interpolate(Point3(0,1,0), 1.0, 2.0, 3.0), 0.001);
|
||||
|
||||
ASSERT_NEAR(1.5f, t1.interpolate(Point3(0.5,0,0), 1.0, 2.0, 3.0), 0.01); // between 1/2
|
||||
ASSERT_NEAR(1.9f, t1.interpolate(Point3(0.9,0,0), 1.0, 2.0, 3.0), 0.01);
|
||||
|
||||
ASSERT_NEAR(2.0f, t1.interpolate(Point3(0,0.5,0), 1.0, 2.0, 3.0), 0.01); // between 1/3
|
||||
ASSERT_NEAR(2.8f, t1.interpolate(Point3(0,0.9,0), 1.0, 2.0, 3.0), 0.01);
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user