载入中...
搜索中...
未找到
GtsTerrainLod.cpp
浏览该文件的文档.
12Result<void> buildGtsTerrainBaseMesh(MeshBuild& output, const Heightmap& heightmap, GtsTerrainSaveResolution resolution,
16 if (exponent < 0 || exponent > 4 || sourceWidth < 2 || sourceHeight < 2 || !std::isfinite(sizeX) || sizeX <= 0.f ||
47 candidate.addVertex(sizeX * float(gx) / float(sourceWidth - 1), heightmap.height(gx, gz) * sizeY,
53 const std::uint32_t a = std::uint32_t(z * columns + x), b = a + 1, c = a + std::uint32_t(columns),
63 const float abx = positions[b * 3] - positions[a * 3], aby = positions[b * 3 + 1] - positions[a * 3 + 1],
65 const float acx = positions[c * 3] - positions[a * 3], acy = positions[c * 3 + 1] - positions[a * 3 + 1],
161float GtsTerrainLodSet::getLevelSwitchDistance(int level, float worldDiameter, float verticalFovDegrees) const {
171int GtsTerrainLodSet::selectLevelForCamera(float distance, float worldDiameter, float verticalFovDegrees) const {
172 if (!std::isfinite(distance) || distance <= 0.0f || !std::isfinite(worldDiameter) || worldDiameter <= 0.0f ||
194Result<std::vector<GtsTerrainLodAssetEntry>> planGtsTerrainLodAssets(const GtsTerrainLodSet& lods,
203 if (!safe(terrainName, false) || !safe(meshFolder, true) || meshFolder.front() == '/' || meshFolder.back() == '/')
205 DiagnosticCode::InvalidArgument, "terrain name or mesh folder is not a safe relative export name",
216 e.objectName = terrainName + " SubTile" + std::to_string(tileIndex) + "_LOD_" + std::to_string(level);
250Result<GtsTerrainLodSet> buildGtsTerrainLods(const MeshBuild& source, int xSplits, int zSplits, GtsMeshPivot pivot,
254 DiagnosticCode::InvalidArgument, "at least one terrain LOD level is required", "procgen.gtsTerrainLod"));
258 !std::isfinite(level.screenRelativeTransitionHeight) || level.screenRelativeTransitionHeight < 0.0f ||
259 level.screenRelativeTransitionHeight > 1.0f || level.screenRelativeTransitionHeight >= previousTransition) {
288 auto simplification = simplifyGtsMesh(simplified, previous, level.quality, level.simplification);
304 DiagnosticCode::InvalidArgument, "GTS sub-tile split count must be in the profile range 0 through 5",
312Result<void> buildDefaultGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet& output, const Heightmap& heightmap,
315 auto built = buildGtsTerrainLodsFromHeightmap(heightmap, resolution, sizeX, sizeY, sizeZ, subTileSplits, pivot,
322Result<void> buildGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet& output, const Heightmap& heightmap,
328 buildGtsTerrainLodsFromHeightmap(heightmap, static_cast<GtsTerrainSaveResolution>(settings.getSaveResolution()),
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
Owned script-friendly GTS terrain LOD export manifest.
Definition GtsTerrainLod.h:90
std::string getMeshName(int index) const
Return an entry mesh name, or empty.
Definition GtsTerrainLod.cpp:234
std::string getObjectName(int index) const
Return an entry object name, or empty.
Definition GtsTerrainLod.cpp:231
std::string getRelativePath(int index) const
Return an entry relative path, or empty.
Definition GtsTerrainLod.cpp:237
Owned result of the GTS split-and-sequential-simplify pipeline.
Definition GtsTerrainLod.h:112
float getLevelSwitchDistance(int level, float worldDiameter, float verticalFovDegrees) const
Convert one level's screen-relative threshold to a perspective-camera distance.
Definition GtsTerrainLod.cpp:161
const GtsTerrainLodLevelSettings * levelAt(int index) const
Return one level setting or nullptr for an invalid index. @ownership The LOD set retains ownership; t...
Definition GtsTerrainLod.cpp:97
int getTileCount() const
Return the number of tiles, including empty source cells.
Definition GtsTerrainLod.h:119
const GtsTerrainLodTile * tileAt(int index) const
Return one tile or nullptr for an invalid index. @ownership The LOD set retains ownership; the caller...
Definition GtsTerrainLod.cpp:93
int selectLevelForCamera(float distance, float worldDiameter, float verticalFovDegrees) const
Select a level directly from perspective-camera distance and bounds diameter.
Definition GtsTerrainLod.cpp:171
int selectLevel(float relativeHeight) const
Select the active level for a projected screen-relative height.
Definition GtsTerrainLod.cpp:154
Schema-versioned native counterpart of GTSMeshSettings.
Definition GtsTerrainLod.h:42
Result< std::vector< GtsTerrainLodLevelSettings > > compileLevels() const
Compile active profile slots into sequential native LOD settings.
Definition GtsTerrainLod.cpp:142
Result< void > setLodQuality(int index, float percent)
Set one of the four simplification percentages in the range 0 through 100.
Definition GtsTerrainLod.cpp:128
float getLodQuality(int index) const noexcept
Return one stored simplification percentage, or -1 for an invalid slot.
Definition GtsTerrainLod.cpp:125
Result< void > setSaveResolution(int value)
Atomically set the SaveResolution enum value.
Definition GtsTerrainLod.cpp:101
Result< void > setLodCount(int value)
Atomically set the active LOD count.
Definition GtsTerrainLod.cpp:109
float getLodTransitionHeight(int index) const noexcept
Return the effective fixed GTS transition height for an active LOD, or -1.
Definition GtsTerrainLod.cpp:137
Result< void > setSubTiles(int value)
Atomically set the equal X/Z split-plane count.
Definition GtsTerrainLod.cpp:117
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
void addVertex(float px, float py, float pz, float nx, float ny, float nz, float u, float v)
Adds vertex.
Definition MeshBuild.cpp:33
void setMeta(const std::string &key, const std::string &value)
Sets the meta.
Definition MeshBuild.cpp:244
int setActiveGroup(const std::string &name)
Select/create the named group assigned to subsequently added triangles.
Definition MeshBuild.cpp:53
Definition EvpackPointGraphLoader.h:12
Result< GtsMeshSplitResult > splitGtsMesh(const MeshBuild &source, int xSplits, int zSplits, GtsMeshPivot pivot)
Split every source triangle against a regular X/Z grid like GTSMeshSplitter.
Definition GtsMeshSplitter.cpp:73
Result< void > buildDefaultGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, int subTileSplits, GtsMeshPivot pivot)
Atomically replace output with the complete default four-level GTS terrain conversion.
Definition GtsTerrainLod.cpp:312
GtsTerrainSaveResolution
Pcg/GTS power-of-two sampling reduction used before terrain mesh export.
Definition GtsTerrainLod.h:18
Result< void > buildGtsTerrainBaseMesh(MeshBuild &output, const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ)
Build the local-space base mesh consumed by the GTS split and LOD pipeline.
Definition GtsTerrainLod.cpp:12
Result< int > simplifyGtsMesh(MeshBuild &output, const MeshBuild &source, float quality, const GtsMeshSimplificationOptions &o)
Simplify a mesh with deterministic quadric edge collapse.
Definition GtsMeshSimplifier.cpp:34
GtsMeshPivot
Pivot translation applied independently to each GTS split mesh.
Definition GtsMeshSplitter.h:11
Result< GtsTerrainLodSet > buildGtsTerrainLodsFromHeightmap(const Heightmap &heightmap, GtsTerrainSaveResolution resolution, float sizeX, float sizeY, float sizeZ, int subTileSplits, GtsMeshPivot pivot, const std::vector< GtsTerrainLodLevelSettings > &levels)
Execute the complete GTS heightmap-to-split-LOD conversion as one atomic operation.
Definition GtsTerrainLod.cpp:298
Result< void > planGtsTerrainLodAssetsInto(GtsTerrainLodAssetPlan &output, const GtsTerrainLodSet &lods, const std::string &name, const std::string &folder)
Atomically replace a script-friendly export plan.
Definition GtsTerrainLod.cpp:240
Result< void > buildGtsTerrainLodsFromHeightmapInto(GtsTerrainLodSet &output, const Heightmap &heightmap, const GtsTerrainMeshSettings &settings, float sizeX, float sizeY, float sizeZ, GtsMeshPivot pivot)
Atomically build a complete heightmap conversion using persisted GTS mesh settings.
Definition GtsTerrainLod.cpp:322
Result< GtsTerrainLodSet > buildGtsTerrainLods(const MeshBuild &source, int xSplits, int zSplits, GtsMeshPivot pivot, const std::vector< GtsTerrainLodLevelSettings > &levels)
Split a terrain mesh and generate each tile's sequential GTS LOD chain.
Definition GtsTerrainLod.cpp:250
Result< std::vector< GtsTerrainLodAssetEntry > > planGtsTerrainLodAssets(const GtsTerrainLodSet &lods, const std::string &terrainName, const std::string &meshFolder)
Build the deterministic object and mesh naming plan used by GTS terrain export.
Definition GtsTerrainLod.cpp:194
std::vector< GtsTerrainLodLevelSettings > defaultGtsTerrainLodLevels()
Return the four-level quality and transition profile used by GTSMeshSettings.
Definition GtsTerrainLod.cpp:181
@ InvalidArgument
Deterministic native export identity for one GTS tile LOD mesh.
Definition GtsTerrainLod.h:81
std::string objectName
Definition GtsTerrainLod.h:84
std::string relativePath
Definition GtsTerrainLod.h:86
Configuration for one sequential GTS terrain mesh LOD.
Definition GtsTerrainLod.h:35
One split terrain tile and all of its local-space LOD meshes.
Definition GtsTerrainLod.h:74