From b19527c3fd5a5e2fa40ad8d6989091af2de54a3a Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Thu, 8 Sep 2022 21:20:49 -0600 Subject: [PATCH] qbsp: don't use brush sides to texture a portal if they're not coplanar --- include/common/polylib.hh | 12 ++++++++++++ qbsp/portals.cc | 5 +++++ 2 files changed, 17 insertions(+) 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)