26 [[nodiscard]]
int width() const noexcept {
return width_; }
27 [[nodiscard]]
int height() const noexcept {
return height_; }
28 [[nodiscard]]
int depth() const noexcept {
return depth_; }
30 [[nodiscard]] glm::vec3
cellSize() const noexcept {
return cellSize_; }
31 [[nodiscard]] std::uint64_t
revision() const noexcept {
return revision_; }
37 void setDensity(
int x,
int y,
int z,
float density);
39 [[nodiscard]]
float densityAt(
int x,
int y,
int z)
const noexcept;
42 void setCurlVelocity(
int x,
int y,
int z,
const glm::vec3& velocity);
44 [[nodiscard]] glm::vec3 curlVelocityAt(
int x,
int y,
int z)
const noexcept;
47 void setLightAssist(
int x,
int y,
int z,
const glm::vec3& assist);
49 [[nodiscard]] glm::vec3 lightAssistAt(
int x,
int y,
int z)
const noexcept;
52 [[nodiscard]]
float sampleDensity(
const glm::vec3&
world)
const noexcept;
54 [[nodiscard]] glm::vec3 sampleCurlVelocity(
const glm::vec3&
world)
const noexcept;
56 [[nodiscard]] glm::vec3 sampleLightAssist(
const glm::vec3&
world)
const noexcept;
66 [[nodiscard]]
Result<void> seedHeightBand(
float baseDensity,
float baseHeight,
float falloff,
67 float curlScale, std::uint32_t
seed);
70 [[nodiscard]]
bool isOccupied(
int x,
int y,
int z,
float threshold = 1e-4f) const noexcept;
73 [[nodiscard]]
std::span<
float> densitySpan() noexcept;
74 [[nodiscard]]
std::span<const
float> densitySpan() const noexcept;
77 [[nodiscard]]
std::
size_t index(
int x,
int y,
int z) const noexcept;
78 [[nodiscard]] glm::vec3 cellCenter(
int x,
int y,
int z) const noexcept;
79 void sampleLattice(const glm::vec3&
world,
int& x0,
int& y0,
int& z0,
int& x1,
int& y1,
int& z1,
80 float& fx,
float& fy,
float& fz) const noexcept;
86 glm::vec3 cellSize_{1.f};
87 std::uint64_t revision_ = 1;
88 std::vector<float> density_;
89 std::vector<glm::vec3> curl_;
90 std::vector<glm::vec3> lightAssist_;