载入中...
搜索中...
未找到
UrbanOutput.cpp
浏览该文件的文档.
85void addQuad(MeshBuild& m, const Vec2& a, const Vec2& b, const Vec2& c, const Vec2& d, float y, float uScale) {
127 opts.accessThreshold = std::clamp(double(params.getFloat("accessThreshold", 0.5f)), 0.01, 10.0);
130 opts.dijkstraJunctionWeight = std::max(0.0, double(params.getFloat("dijkstraJunctionWeight", 1.5f)));
131 opts.boundaryStreetFraction = std::clamp(double(params.getFloat("boundaryStreetFraction", 0.5f)), 0.0, 1.0);
285 out.addVertex(float(v.x), y, float(v.y), nx, ny, nz, float(v.x) * uvScale, float(v.y) * uvScale);
292 out.addTriangle(uint32_t(base + tris[t]), uint32_t(base + tris[t + 2]), uint32_t(base + tris[t + 1]));
338 descriptor.params.push_back(ParamDescriptor::floating("landWidth", "Land Width", 100.f, 1.f, 10000.f, 1.f));
339 descriptor.params.push_back(ParamDescriptor::floating("landHeight", "Land Height", 60.f, 1.f, 10000.f, 1.f));
341 descriptor.params.push_back(ParamDescriptor::integer("targetParcels", "Target Parcels", 120, 0, 10000));
342 descriptor.params.push_back(ParamDescriptor::floating("minParcelArea", "Minimum Parcel Area", 4.f, 0.01f,
344 descriptor.params.push_back(ParamDescriptor::integer("maxLevels", "Maximum Levels", 10, 1, 128));
345 descriptor.params.push_back(ParamDescriptor::choice("streetPattern", "Street Pattern", "default",
347 descriptor.params.push_back(ParamDescriptor::floating("streetWidth", "Street Width", 1.f, 0.1f, 100.f,
351 descriptor.params.push_back(ParamDescriptor::choice("boundaryStreet", "Boundary Streets", "all",
353 descriptor.params.push_back(ParamDescriptor::floating("cellSize", "Grid Cell Size", 1.f, 0.05f, 100.f,
361 addAdvanced(ParamDescriptor::floating("lambdaRegu", "Regularity Weight", 0.5f, 0.f, 100.f, 0.01f));
363 addAdvanced(ParamDescriptor::floating("lambdaOrient", "Orientation Weight", 0.f, 0.f, 100.f, 0.01f));
366 addAdvanced(ParamDescriptor::floating("accessThreshold", "Access Threshold", 0.5f, 0.01f, 10.f, 0.01f));
367 addAdvanced(ParamDescriptor::floating("shortEdgeFactor", "Short Edge Factor", 0.2f, 0.f, 1.f, 0.01f));
368 addAdvanced(ParamDescriptor::floating("dijkstraJunctionWeight", "Junction Weight", 1.5f, 0.f, 100.f,
370 addAdvanced(ParamDescriptor::floating("boundaryStreetFraction", "Boundary Street Fraction", 0.5f, 0.f,
373 addAdvanced(ParamDescriptor::integer("optimizeIterations", "Optimize Iterations", 160, 0, 2000));
374 addAdvanced(ParamDescriptor::floating("optRegu", "Optimize Regularity", 0.2f, 0.f, 100.f, 0.01f));
377 addAdvanced(ParamDescriptor::floating("optJunc", "Optimize Junctions", 0.5f, 0.f, 100.f, 0.01f));
378 addAdvanced(ParamDescriptor::floating("optClose", "Optimize Closure", 0.3f, 0.f, 100.f, 0.01f));
Registry for executable generators and their reflection metadata.
Definition GeneratorRegistry.h:23
void registerAlgorithm(const std::string &id, GeneratorFn fn)
Register an algorithm without metadata for backward compatibility.
Definition GeneratorRegistry.cpp:11
Intermediate 2D generation result. cells store semantic ids (see Semantic.h), not tile GIDs — convert...
Definition Grid2D.h:36
void setDetail(int x, int y, int value)
Per-cell detail layer (0..255), parallel to cells. Semantics stay in cells (palette/GID compatible); ...
Definition Grid2D.cpp:37
void addObjectAt(const std::string &name, const std::string &type, float x, float y)
Script-friendly: name/type + tile coords.
Definition Grid2D.cpp:58
void setMeta(const std::string &key, const std::string &value)
Sets the meta.
Definition Grid2D.cpp:47
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
void registerRecipe(const std::string &id, MeshRecipeFn fn)
Register a recipe without metadata.
Definition MarchingCubes.cpp:456
Hierarchical co-generation of parcels and streets (paper Section 4) plus the global geometric optimiz...
Definition UrbanGenerator.h:24
bool generate(std::string *error=nullptr)
Run the pipeline. On failure error receives a human-readable reason.
Definition UrbanGenerator.cpp:479
Definition UrbanCrossField.cpp:12
void registerUrbanMeshRecipes(MeshRecipeRegistry ®istry)
Registers urban mesh recipes.
Definition UrbanOutput.cpp:387
bool pointInPolygon(const Vec2 &p, const Polygon &poly)
Point-in-polygon test (ray casting; boundary counts as inside).
Definition UrbanGeometry.cpp:112
bool triangulatePolygon(const Polygon &poly, std::vector< int > &outTriangles)
Triangulate a simple polygon by ear clipping; returns CCW triangles (3*i..3*i+2).
Definition UrbanGeometry.cpp:462
bool parseUrbanOptions(const Params ¶ms, UrbanOptions &opts, std::string &error)
Parse Procgen Params into urban generator options. Params: land/landPoints, minParcelArea,...
Definition UrbanOutput.cpp:101
double distanceToSegment(const Vec2 &p, const Vec2 &a, const Vec2 &b)
Raster helper: does the pixel-center fall within eps of segment a-b?
Definition UrbanGeometry.cpp:513
bool generateUrbanMesh(const Params ¶ms, MeshBuild &out, std::string &error)
MeshBuild of parcel blocks + street ribbons (flat or extruded, Y-up).
Definition UrbanOutput.cpp:246
std::vector< Vec2 > Polygon
Closed polygon ring, stored CCW, without repeating the first point.
Definition UrbanTypes.h:55
bool generateUrbanGrid(const Params ¶ms, Grid2D &out, std::string &error)
Grid2D rasterization of the urban layout (Semantic::Road/Floor/Wall + parcel detail).
Definition UrbanOutput.cpp:160
void registerUrbanGenerators(GeneratorRegistry ®istry)
Register "urban.parcels" (Grid2D) and "mesh.urban" (MeshBuild) builtins.
Definition UrbanOutput.cpp:382
bool ensureCCW(Polygon &poly)
Ensure the ring is CCW (positive signed area); returns whether it was flipped.
Definition UrbanGeometry.cpp:78
static ParamDescriptor boolean(std::string key, std::string label, bool defaultValue)
Construct a Boolean descriptor stored as zero or one in Params.
Definition ParamSchema.cpp:47
static ParamDescriptor choice(std::string key, std::string label, std::string defaultValue, std::vector< std::string > choices)
Construct a finite-choice string descriptor.
Definition ParamSchema.cpp:65
static ParamDescriptor floating(std::string key, std::string label, float defaultValue, float minimum, float maximum, float step)
Construct a bounded floating-point descriptor.
Definition ParamSchema.cpp:33
static ParamDescriptor integer(std::string key, std::string label, int defaultValue, int minimum, int maximum, int step=1)
Construct a bounded integer descriptor.
Definition ParamSchema.cpp:19
static ParamDescriptor text(std::string key, std::string label, std::string defaultValue)
Construct a free-form string descriptor.
Definition ParamSchema.cpp:56
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52
std::vector< ParamDescriptor > params
Definition ParamSchema.h:56
A street decomposed from the street network graph: consecutive street edges whose included angle is l...
Definition UrbanTypes.h:63
Structured urban layout produced by the hierarchical co-generation (paper Section 4) plus the geometr...
Definition UrbanTypes.h:84
All user-facing controls for the urban generator. Defaults follow the paper (λ=0.3/0....
Definition UrbanTypes.h:117
double boundaryStreetFraction
Definition UrbanTypes.h:134
int boundaryStreetMode
Definition UrbanTypes.h:139
int culDeSacAfterLevel
Definition UrbanTypes.h:137
int optimizeIterations
Definition UrbanTypes.h:142
double dijkstraJunctionWeight
Definition UrbanTypes.h:133
Minimal 2D vector used by the urban layout algorithms (paper coordinates).
Definition UrbanTypes.h:15