This commit is contained in:
aozhiwei 2023-02-08 14:34:43 +08:00
parent 7a28ce4650
commit 5a4c4b6e75

View File

@ -729,6 +729,36 @@ void MapInstance::TraverseHouseList(std::function<void (HouseInfo*)> func)
bool MapInstance::PtInHouse(const glm::vec3& pt, glm::vec3& nearest_pt)
{
float fpt[3];
fpt[0] = pt.x;
fpt[1] = pt.y;
fpt[2] = pt.z;
float closest[3];
float edged[DT_VERTS_PER_POLYGON];
float edget[DT_VERTS_PER_POLYGON];
for (auto& house : houses_) {
float* verts = &house.verts[0];
if (!house.verts.empty() && dtPointInPolygon(fpt, &house.verts[0], house.verts.size())) {
if (dtDistancePtPolyEdgesSqr(fpt, &house.verts[0], house.verts.size(), edged, edget)) {
float dmin = edged[0];
int imin = 0;
for (size_t i = 1; i < house.verts.size(); ++i) {
if (edged[i] < dmin) {
dmin = edged[i];
imin = i;
}
}
const float* va = &verts[imin*3];
const float* vb = &verts[((imin+1)%house.verts.size())*3];
dtVlerp(closest, va, vb, edget[imin]);
nearest_pt.x = closest[0];
nearest_pt.y = closest[1];
nearest_pt.z = closest[2];
return true;
}
}
}
return false;
}
@ -770,6 +800,13 @@ void MapInstance::LoadHouse()
HouseInfo p;
p.node = node;
{
for (auto& point : new_points) {
p.verts.push_back(point.x);
p.verts.push_back(point.y);
p.verts.push_back(point.z);
}
}
houses_.push_back(p);
}
}