载入中...
搜索中...
未找到
CloudField.h
浏览该文件的文档.
1#pragma once
2
3#include <cstdint>
4
5namespace eve::procgen {
6
18public:
19 struct Params {
20 uint32_t seed = 1337;
21 float worldScale = 96.f; // world units per tile (larger = larger clouds)
22 float coverage = 0.55f; // 0..1 fraction of sky covered (threshold)
23 float softness = 0.12f; // 0..1 edge softness of cloud blobs
24 float detail = 0.5f; // 0..1 high-frequency wisp detail amount
25 float windSpeed = 4.f; // world units / second drift speed
26 float windAngle = 0.f; // drift direction (radians, +z axis = 0)
27 int octaves = 4;
28 float lacunarity = 2.f;
29 float gain = 0.5f;
30 float warp = 2.2f; // domain-warp amplitude (organic puffs)
31 bool seamless = true;
32 };
33
34 CloudField() = default;
35 explicit CloudField(const Params &params) { setParams(params); }
36
37 const Params &params() const { return params_; }
38 void setParams(const Params &params);
39
40 void setSeed(uint32_t seed);
41 void setWorldScale(float worldScale);
42 void setCoverage(float coverage);
43 void setSoftness(float softness);
44 void setDetail(float detail);
45 void setWind(float speed, float angleRad);
46 void setOctaves(int octaves);
47 void setWarp(float warp);
48 void setSeamless(bool seamless);
49
51 float coverageAt(float x, float z, float time) const;
52
54 void sample(float *out, int width, int height, float time, float x0, float z0,
55 float extent) const;
56
58 void windVelocity(float &vx, float &vz) const;
59
61 static constexpr int kLattice = 64;
62
63private:
64 Params params_;
65};
66
67} // namespace eve::procgen
uint32_t seed
int z
Definition Grass.cpp:135
float height
Definition Grass.cpp:235
int x
Definition Grass.cpp:135
int width
Deterministic, seamlessly-tiling, time-animated procedural cloud field.
Definition CloudField.h:17
void setSeamless(bool seamless)
void setParams(const Params &params)
void setWorldScale(float worldScale)
void setWarp(float warp)
float coverageAt(float x, float z, float time) const
Cloud coverage at world (x, z) and time t, in [0,1].
void windVelocity(float &vx, float &vz) const
Drift vector (world units/sec) implied by windSpeed + windAngle.
void setDetail(float detail)
void setSoftness(float softness)
void setOctaves(int octaves)
void setSeed(uint32_t seed)
static constexpr int kLattice
Internal lattice resolution per tile (also the noise wrap period).
Definition CloudField.h:61
void setCoverage(float coverage)
void sample(float *out, int width, int height, float time, float x0, float z0, float extent) const
CloudField(const Params &params)
Definition CloudField.h:35
const Params & params() const
Definition CloudField.h:37
void setWind(float speed, float angleRad)
Generation parameters. Algorithm-specific keys live in values as strings (no overloads; typed setters...
Definition Params.h:13