diff --git a/include/common/polylib.hh b/include/common/polylib.hh index 6148b7ab..7d500646 100644 --- a/include/common/polylib.hh +++ b/include/common/polylib.hh @@ -988,6 +988,18 @@ public: return counts; } + vec_t max_dist_off_plane(const qplane3d& plane) + { + vec_t max_dist = 0.0; + for (size_t i = 0; i < size(); i++) { + vec_t dist = abs(plane.distance_to(at(i))); + if (dist > max_dist) { + max_dist = dist; + } + } + return max_dist; + } + /* ================== ClipWinding diff --git a/qbsp/portals.cc b/qbsp/portals.cc index d752cfc2..718e1d24 100644 --- a/qbsp/portals.cc +++ b/qbsp/portals.cc @@ -835,6 +835,11 @@ static void FindPortalSide(portal_t *p, visible_faces_stats_t &stats) for (auto &side : brush->sides) { if (side.bevel) continue; + + if (p->winding.max_dist_off_plane(side.get_plane()) > 0.1) { + continue; + } + if ((side.planenum & ~1) == p->onnode->planenum) { // exact match (undirectional)