载入中...
搜索中...
未找到
RoadTerrain.cpp
浏览该文件的文档.
19 return Result<T>::failure(Diagnostic::error(code, std::move(message), std::move(path), {}, "procgen.road"));
27 !std::isfinite(options.originX) || !std::isfinite(options.originZ) || !std::isfinite(options.cellSize) ||
30 !std::isfinite(options.maxVerticalDelta) || options.maxVerticalDelta < 0.f || options.maximumWork == 0u)
50 if (ia < 0 || ib < 0 || ic < 0 || ia >= roadMesh.getVertexCount() || ib >= roadMesh.getVertexCount() ||
54 const float ax = roadMesh.getPositionX(ia), ay = roadMesh.getPositionY(ia), az = roadMesh.getPositionZ(ia);
55 const float bx = roadMesh.getPositionX(ib), by = roadMesh.getPositionY(ib), bz = roadMesh.getPositionZ(ib);
56 const float cx = roadMesh.getPositionX(ic), cy = roadMesh.getPositionY(ic), cz = roadMesh.getPositionZ(ic);
64 const int minX = std::max(0, static_cast<int>(std::floor((std::min({ax, bx, cx}) - options.originX) /
66 const int maxX = std::min(width - 1, static_cast<int>(std::ceil((std::max({ax, bx, cx}) - options.originX) /
68 const int minZ = std::max(0, static_cast<int>(std::floor((std::min({az, bz, cz}) - options.originZ) /
70 const int maxZ = std::min(height - 1, static_cast<int>(std::ceil((std::max({az, bz, cz}) - options.originZ) /
173Result<int> restoreHeightmapFromRoad(Heightmap& terrain, const RoadTerrainConformReceipt& receipt) {
174 if (terrain.getWidth() != receipt.width || terrain.getHeight() != receipt.height || receipt.width <= 0 ||
177 return terrainFail<int>(DiagnosticCode::InvalidArgument, "road terrain receipt shape is invalid", "receipt");
178 const auto sampleCount = static_cast<std::size_t>(receipt.width) * static_cast<std::size_t>(receipt.height);
182 if (index >= sampleCount || (i > 0 && index <= previous) || !std::isfinite(receipt.before[i]) ||
184 return terrainFail<int>(DiagnosticCode::InvalidArgument, "road terrain receipt samples are invalid",
Stable, structured diagnostics shared by engine modules.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
In-memory terrain heightmap: a dense float grid (row-major, index = y * width + x) materialized from ...
Definition Heightmap.h:21
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
int getTriangleGroup(int triangleIndex) const
Group index for a triangle (not an index-buffer element), or -1.
Definition MeshBuild.cpp:70
std::string getGroupName(int groupIndex) const
Group name, or an empty string for an invalid index.
Definition MeshBuild.cpp:65
Definition RoadBake.cpp:17
EVENGINE_API_DOMAINS Result< int > conformHeightmapToRoad(Heightmap &terrain, const MeshBuild &roadMesh, const RoadTerrainConformOptions &options={})
Atomically conform a heightmap to nearby baked road surface triangles.
Definition RoadTerrain.cpp:166
EVENGINE_API_DOMAINS Result< int > restoreHeightmapFromRoad(Heightmap &terrain, const RoadTerrainConformReceipt &receipt)
Atomically restore a conformance receipt if none of its samples became stale.
Definition RoadTerrain.cpp:173
EVENGINE_API_DOMAINS Result< RoadTerrainConformReceipt > conformHeightmapToRoadWithReceipt(Heightmap &terrain, const MeshBuild &roadMesh, const RoadTerrainConformOptions &options={})
Atomically conform terrain and return the exact reversible sample delta.
Definition RoadTerrain.cpp:24
@ InvalidArgument
@ PreconditionViolation
@ InvariantViolation
@ Conflict
World/grid mapping and bounded blending settings for road-to-terrain conformance.
Definition RoadBake.h:18
Exact changed samples needed to safely restore one road terrain conformance. @cost Storage,...
Definition RoadBake.h:32
int skippedTunnelSamples
Cells whose terrain roof was kept above tunnel surfaces.
Definition RoadBake.h:36
std::vector< float > after
Definition RoadBake.h:39
std::vector< float > before
Definition RoadBake.h:38
std::vector< std::size_t > sampleIndices
Definition RoadBake.h:37