mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 09:10:49 +02:00
keep edge-row buildings' eave overhangs across the seam
A body-anchored building's eave juts frontEave voxels past the map boundary; the neighbour-body mask read that overhang as a ring scrap and opened the roof rim into the sky from across the seam. Building placements only scan the body, so their quads now carry an `own` flag the edge keep-rules never touch.
This commit is contained in:
@@ -128,6 +128,16 @@
|
|||||||
body is the scrap the mask is for. The mesher now reads the winding and
|
body is the scrap the mask is for. The mesher now reads the winding and
|
||||||
keeps outward faces on the body's boundary planes, on all four edges.
|
keeps outward faces on the body's boundary planes, on all four edges.
|
||||||
|
|
||||||
|
The roof RIM had the same problem one step further out: an edge-row
|
||||||
|
house's eave overhangs `frontEave` voxels PAST the boundary plane into
|
||||||
|
the neighbour's airspace, and those quads are neither on the plane
|
||||||
|
(the winding rescue) nor over the body -- the neighbour-body mask ate
|
||||||
|
them as ring scraps, so from across the seam the roof edge was open
|
||||||
|
sky at low camera angles. Building placements only ever scan the map
|
||||||
|
BODY, so every building quad is this map's own structure by
|
||||||
|
construction: they now carry an `own` flag the edge keep-rules never
|
||||||
|
touch.
|
||||||
|
|
||||||
## 1.0.3
|
## 1.0.3
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
@@ -669,6 +669,13 @@ function Buildings.stamp(S, map, quads, tx, ty, bw, bh)
|
|||||||
{ q[3][1] + mx, q[3][2], q[3][3] + mz },
|
{ q[3][1] + mx, q[3][2], q[3][3] + mz },
|
||||||
{ q[4][1] + mx, q[4][2], q[4][3] + mz },
|
{ q[4][1] + mx, q[4][2], q[4][3] + mz },
|
||||||
uv = q.uv, shade = q.shade,
|
uv = q.uv, shade = q.shade,
|
||||||
|
-- placements only ever scan the BODY, so a building is always this
|
||||||
|
-- map's own structure: the mesher's edge keep-rules must not eat
|
||||||
|
-- the parts that poke past the boundary (an edge-row house's eave
|
||||||
|
-- juts frontEave voxels into the neighbour's airspace, and the
|
||||||
|
-- neighbour-body mask read that overhang as a ring scrap -- which
|
||||||
|
-- opened the roof rim into the sky from across the seam)
|
||||||
|
own = true,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+7
-1
@@ -679,7 +679,13 @@ local function runGeometry(map, bodyOnly, masks, sink)
|
|||||||
local x1 = math.max(q[1][1], q[2][1], q[3][1], q[4][1])
|
local x1 = math.max(q[1][1], q[2][1], q[3][1], q[4][1])
|
||||||
local z0 = math.min(q[1][3], q[2][3], q[3][3], q[4][3])
|
local z0 = math.min(q[1][3], q[2][3], q[3][3], q[4][3])
|
||||||
local z1 = math.max(q[1][3], q[2][3], q[3][3], q[4][3])
|
local z1 = math.max(q[1][3], q[2][3], q[3][3], q[4][3])
|
||||||
if outwardOnEdge(q, x0, z0, x1, z1) or keepQuad(x0, z0, x1, z1) then
|
-- q.own: a body-anchored structure's own quad (a building placed by
|
||||||
|
-- Buildings.build, whose scan never leaves the body). Exempt from
|
||||||
|
-- the edge keep-rules entirely: its eave legitimately overhangs the
|
||||||
|
-- boundary plane into the neighbour's airspace, and no variant of
|
||||||
|
-- the neighbour will ever draw that geometry
|
||||||
|
if q.own or outwardOnEdge(q, x0, z0, x1, z1)
|
||||||
|
or keepQuad(x0, z0, x1, z1) then
|
||||||
push({ q[1], q[2], q[3], q[4] }, quadUV(q), groundShades(q, q.shade))
|
push({ q[1], q[2], q[3], q[4] }, quadUV(q), groundShades(q, q.shade))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user