minor changes to floorplan
fixed some compile issues worked on nav-meshes added some tests
This commit is contained in:
@@ -34,7 +34,7 @@ namespace NM {
|
||||
float dot00;
|
||||
float dot01;
|
||||
float dot11;
|
||||
float invDenom;
|
||||
double invDenom;
|
||||
float area;
|
||||
|
||||
float minZ;
|
||||
@@ -66,6 +66,44 @@ namespace NM {
|
||||
Point3 getP3() const {return p3;}
|
||||
|
||||
|
||||
/** get the distance between the given point and the triangle using approximate tests */
|
||||
float getDistanceApx(const Point3 pt) const {
|
||||
|
||||
// const float d1 = pt.getDistance(p1);
|
||||
// const float d2 = pt.getDistance(p2);
|
||||
// const float d3 = pt.getDistance(p3);
|
||||
// const float d4 = pt.getDistance(center);
|
||||
// const float d5 = pt.getDistance((p1-p2)/2);
|
||||
// const float d6 = pt.getDistance((p2-p3)/2);
|
||||
// const float d7 = pt.getDistance((p3-p1)/2);
|
||||
// return std::min(d1, std::min(d2, std::min(d3, std::min(d4, std::min(d5, std::min(d6,d7))))));
|
||||
|
||||
// const float d1 = pt.getDistance(p1);
|
||||
// const float d2 = pt.getDistance(p2);
|
||||
// const float d3 = pt.getDistance(p3);
|
||||
// const float d4 = pt.getDistance(center);
|
||||
// return std::min(d1, std::min(d2, std::min(d3,d4)));
|
||||
|
||||
float bestD = 99999;
|
||||
Point3 bestP;
|
||||
Point3 dir12 = p2-p1;
|
||||
Point3 dir13 = p3-p1;
|
||||
Point3 dir23 = p3-p2;
|
||||
for (float f = 0; f < 1; f += 0.05f) {
|
||||
const Point3 pos1 = p1 + dir12 * f; const float dist1 = pos1.getDistance(pt);
|
||||
const Point3 pos2 = p1 + dir13 * f; const float dist2 = pos2.getDistance(pt);
|
||||
const Point3 pos3 = p2 + dir23 * f; const float dist3 = pos3.getDistance(pt);
|
||||
if (dist1 < bestD) {bestP = pos1; bestD = dist1;}
|
||||
if (dist2 < bestD) {bestP = pos2; bestD = dist2;}
|
||||
if (dist3 < bestD) {bestP = pos3; bestD = dist3;}
|
||||
}
|
||||
|
||||
return bestD;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool operator == (const NavMeshTriangle& o) const {
|
||||
return (p1 == o.p1) && (p2 == o.p2) && (p3 == o.p3);
|
||||
}
|
||||
@@ -122,7 +160,11 @@ namespace NM {
|
||||
float v = (dot00 * dot12 - dot01 * dot02) * invDenom;
|
||||
|
||||
const Point3 res = getPoint(v,u);
|
||||
return res;
|
||||
Assert::isNear(res.x, p.x, 1.0f, "TODO: high difference while mapping from 2D to 3D");
|
||||
Assert::isNear(res.y, p.y, 1.0f, "TODO: high difference while mapping from 2D to 3D");
|
||||
|
||||
//return res;
|
||||
return Point3(p.x, p.y, res.z); // only use the new z, keep input as-is
|
||||
|
||||
}
|
||||
|
||||
@@ -159,7 +201,7 @@ namespace NM {
|
||||
dot11 = dot(v1, v1);
|
||||
|
||||
// Compute barycentric coordinates
|
||||
invDenom = 1.0f / (dot00 * dot11 - dot01 * dot01);
|
||||
invDenom = 1.0 / ((double)dot00 * (double)dot11 - (double)dot01 * (double)dot01);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user