50 glm::ivec3
cellOf(
const glm::vec3&
p)
const;
64 void setSdf(
const MeshSdf& sdf);
89 void step(
float dt,
int substeps);
101 const std::vector<FluidParticle>&
particles()
const {
return particles_; }
105 std::vector<FluidParticle>&
particles() {
return particles_; }
109 const std::vector<float>&
densities()
const {
return densities_; }
125 void computeDensitiesAndGrads();
126 void computeLambdas();
127 void applyPositionCorrections();
128 void integrate(
float dt);
133 int maxParticles_ = 0;
135 std::vector<FluidParticle> particles_;
136 std::vector<float> densities_;
137 std::vector<float> lambdas_;
138 std::vector<glm::vec3> gradSums_;
139 std::vector<int> cellHead_;
140 std::vector<int> cellNext_;
#define EVENGINE_API_DOMAINS
CPU reference surface-flow solver.
int maxParticles() const
Max particles.
std::vector< float > & densities()
Densities.
const FluidParams & params() const
Params.
FluidParams & params()
Params.
int particleCount() const
Particle count.
const std::vector< FluidParticle > & particles() const
Particles.
const MeshSdf & sdf() const
Sdf.
const std::vector< float > & densities() const
Densities.
std::vector< FluidParticle > & particles()
Particles.
Uniform signed-distance voxel field over a box.
std::vector< ParamSpec > params
GLSL compute kernels for the GPU surface-flow solver.
Tuning knobs of one fluid simulation.
Uniform grid used for neighbor queries.
bool inBounds(int x, int y, int z) const
In bounds.
static SimGrid make(const MeshSdf &sdf, float cellSize)
Build a grid covering the SDF domain plus one cell of padding.
float cellSize
Cell size in world units (== SPH support radius).
int cellCount() const
Cell count.
glm::vec3 origin
World position of cell (0,0,0).
glm::ivec3 cellOf(const glm::vec3 &p) const
Cell of.
int cellIndex(int x, int y, int z) const
Cell index.
glm::ivec3 dims
Cell counts per axis.