diff options
| author | DS <vorunbekannt75@web.de> | 2022-09-18 15:28:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-09-18 15:28:53 +0200 |
| commit | c9ed059d9170f2f7f662cbb59e6009fd54c8ed3f (patch) | |
| tree | 99b6adee12a0e76b3f2a25e2a6e5975bfaeaac28 /src/client/meshgen | |
| parent | a428a0cf37581a35f9c4f81c2e71633e6cc3dbb9 (diff) | |
| download | minetest-c9ed059d9170f2f7f662cbb59e6009fd54c8ed3f.tar.xz | |
Client map: do frustum culling via planes (#12710)
Diffstat (limited to 'src/client/meshgen')
| -rw-r--r-- | src/client/meshgen/collector.cpp | 10 | ||||
| -rw-r--r-- | src/client/meshgen/collector.h | 6 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/client/meshgen/collector.cpp b/src/client/meshgen/collector.cpp index 25457c868..c5f4eb976 100644 --- a/src/client/meshgen/collector.cpp +++ b/src/client/meshgen/collector.cpp @@ -45,9 +45,12 @@ void MeshCollector::append(const TileLayer &layer, const video::S3DVertex *verti scale = 1.0f / layer.scale; u32 vertex_count = p.vertices.size(); - for (u32 i = 0; i < numVertices; i++) + for (u32 i = 0; i < numVertices; i++) { p.vertices.emplace_back(vertices[i].Pos, vertices[i].Normal, vertices[i].Color, scale * vertices[i].TCoords); + m_bounding_radius_sq = std::max(m_bounding_radius_sq, + (vertices[i].Pos - m_center_pos).getLengthSQ()); + } for (u32 i = 0; i < numIndices; i++) p.indices.push_back(indices[i] + vertex_count); @@ -81,8 +84,11 @@ void MeshCollector::append(const TileLayer &layer, const video::S3DVertex *verti video::SColor color = c; if (!light_source) applyFacesShading(color, vertices[i].Normal); - p.vertices.emplace_back(vertices[i].Pos + pos, vertices[i].Normal, color, + auto vpos = vertices[i].Pos + pos; + p.vertices.emplace_back(vpos, vertices[i].Normal, color, scale * vertices[i].TCoords); + m_bounding_radius_sq = std::max(m_bounding_radius_sq, + (vpos - m_center_pos).getLengthSQ()); } for (u32 i = 0; i < numIndices; i++) diff --git a/src/client/meshgen/collector.h b/src/client/meshgen/collector.h index e4189088e..c390c53e7 100644 --- a/src/client/meshgen/collector.h +++ b/src/client/meshgen/collector.h @@ -37,6 +37,12 @@ struct PreMeshBuffer struct MeshCollector { std::array<std::vector<PreMeshBuffer>, MAX_TILE_LAYERS> prebuffers; + // bounding sphere radius and center + f32 m_bounding_radius_sq = 0.0f; + v3f m_center_pos; + + // center_pos: pos to use for bounding-sphere, in BS-space + MeshCollector(const v3f center_pos) : m_center_pos(center_pos) {} // clang-format off void append(const TileSpec &material, |
