载入中...
搜索中...
未找到
MarchingCubes.h
浏览该文件的文档.
1#pragma once
2
3#include "procgen/MeshBuild.h"
5#include "procgen/Params.h"
6
7#include <functional>
8#include <string>
9#include <unordered_map>
10#include <vector>
11
12namespace eve::procgen {
13
21EVENGINE_API_DOMAINS bool marchingCubes(const float *density, int nx, int ny, int nz, float isolevel, MeshBuild &out,
22 std::string *error = nullptr);
23
25EVENGINE_API_DOMAINS bool fillDensityField(const Params &params, std::vector<float> &density, int &nx, int &ny, int &nz,
26 std::string &error);
27
29bool generateMarchingCubesMesh(const Params &params, MeshBuild &out, std::string &error);
30
36bool generateHexPlanetMesh(const Params &params, MeshBuild &out, std::string &error);
37
38using MeshRecipeFn = std::function<bool(const Params &params, MeshBuild &out, std::string &error)>;
39
42public:
44 static MeshRecipeRegistry &instance();
45
47 void registerRecipe(const std::string &id, MeshRecipeFn fn);
49 void registerRecipe(RecipeDescriptor descriptor, MeshRecipeFn fn);
51 bool has(const std::string &id) const;
53 bool generate(const std::string &id, const Params &params, MeshBuild &out,
54 std::string &error) const;
56 std::vector<std::string> list() const;
58 const RecipeDescriptor *descriptor(const std::string &id) const;
60 bool applyDefaults(const std::string &id, Params &params) const;
61
63 void registerBuiltins();
64
65private:
66 struct Entry {
69 };
70 MeshRecipeRegistry() = default;
71 std::unordered_map<std::string, Entry> recipes_;
72 bool builtinsRegistered_ = false;
73};
74
75} // namespace eve::procgen
std::string descriptor
float nx
float nz
float ny
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::string error
Definition Package.cpp:60
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:19
EVENGINE_API_DOMAINS public API.
Owning, typed generation parameters.
Definition Params.h:27
std::vector< ParamSpec > params
bool generateHexPlanetMesh(const Params &params, MeshBuild &out, std::string &error)
Build the dual of a subdivided icosahedron. The result is a closed planet made of hexagonal cells plu...
std::function< bool(const Params &params, MeshBuild &out, std::string &error)> MeshRecipeFn
bool marchingCubes(const float *density, int nx, int ny, int nz, float isolevel, MeshBuild &out, std::string *error)
Classic Marching Cubes (Lorensen & Cline) over a regular scalar volume. Density >= isolevel is treate...
bool generateMarchingCubesMesh(const Params &params, MeshBuild &out, std::string &error)
Build mesh from Params (field + resolution + isolevel).
bool fillDensityField(const Params &params, std::vector< float > &density, int &nx, int &ny, int &nz, std::string &error)
Fill a density volume from a named field recipe (sphere / noise / terrain / torus).
SettlementPipeline::Stage fn
Complete metadata and parameter schema shared by every procgen recipe family.
Definition ParamSchema.h:52