载入中...
搜索中...
未找到
MarchingCubes.h
浏览该文件的文档.
1#pragma once
2
3#include "procgen/MeshBuild.h"
4#include "procgen/Params.h"
5
6#include <functional>
7#include <string>
8#include <unordered_map>
9#include <vector>
10
11namespace eve::procgen {
12
20bool marchingCubes(const float *density, int nx, int ny, int nz, float isolevel, MeshBuild &out,
21 std::string *error = nullptr);
22
24bool fillDensityField(const Params &params, std::vector<float> &density, int &nx, int &ny, int &nz,
25 std::string &error);
26
28bool generateMarchingCubesMesh(const Params &params, MeshBuild &out, std::string &error);
29
35bool generateHexPlanetMesh(const Params &params, MeshBuild &out, std::string &error);
36
37using MeshRecipeFn = std::function<bool(const Params &params, MeshBuild &out, std::string &error)>;
38
40public:
42
43 void registerRecipe(const std::string &id, MeshRecipeFn fn);
44 bool has(const std::string &id) const;
45 bool generate(const std::string &id, const Params &params, MeshBuild &out,
46 std::string &error) const;
47 std::vector<std::string> list() const;
48
49 void registerBuiltins();
50
51private:
52 MeshRecipeRegistry() = default;
53 std::unordered_map<std::string, MeshRecipeFn> recipes_;
54 bool builtinsRegistered_ = false;
55};
56
57} // namespace eve::procgen
std::string error
SettlementPipeline::Stage fn
CPU triangle mesh from procedural mesh recipes (e.g. marching cubes). Positions/normals are xyz-packe...
Definition MeshBuild.h:14
void registerRecipe(const std::string &id, MeshRecipeFn fn)
std::vector< std::string > list() const
static MeshRecipeRegistry & instance()
bool has(const std::string &id) const
bool generate(const std::string &id, const Params &params, MeshBuild &out, std::string &error) const
Generation parameters. Algorithm-specific keys live in values as strings (no overloads; typed setters...
Definition Params.h:13
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).
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).