载入中...
搜索中...
未找到
VolumeFluidDiffuse.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include <glm/vec3.hpp>
6#include <glm/vec4.hpp>
7#include <span>
8#include <string>
9#include <vector>
10#include "common/Result.h"
11#include "fluids/VolumeFluid.h"
12
13namespace eve::fluids {
14
17 glm::vec3 position{0.f};
18 glm::vec3 velocity{0.f};
20 float life = 2.f;
21};
22
25 std::string schema = "eve.volume-fluid-diffuse";
26 unsigned version = 1;
27 unsigned capacity = 2048;
28 std::vector<VolumeFluidDiffuseParticle> particles;
29};
30
39public:
41 VolumeFluidDiffuse() = default;
43 [[nodiscard]] Result<void> emit(std::span<const VolumeFluidDiffuseParticle> particles);
54 [[nodiscard]] Result<void> advance(const VolumeFluid& fluid, float seconds, unsigned minimumNeighbors = 4);
56 [[nodiscard]] VolumeFluidDiffuseSnapshot snapshot() const;
58 [[nodiscard]] Result<void> restore(const VolumeFluidDiffuseSnapshot& snapshot);
60 [[nodiscard]] unsigned particleCount() const;
62 [[nodiscard]] unsigned availableCapacity() const;
67 void copyRenderData(std::vector<glm::vec4>& positionLife) const;
69 void clear();
70
71private:
72 unsigned capacity_ = 2048;
73 std::vector<VolumeFluidDiffuseParticle> particles_;
74 std::vector<VolumeFluidDiffuseParticle> candidateScratch_;
75 std::vector<glm::vec3> positionScratch_;
76 std::vector<VolumeFluidFieldSample> sampleScratch_;
77};
78} // namespace eve::fluids
#define EVENGINE_API_DOMAINS
Definition Export.h:110
Move-only, checked operation results for the common layer.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Bounded, one-way fluid-advected secondary particle pool. @ownership Owns particles and capacity; no f...
VolumeFluidDiffuse()=default
Creates an empty pool with capacity 2048; use restore to configure a different capacity.
CPU position-based free-volume fluid with a bounded spatial grid. @ownership Owns all particle state;...
GLSL compute kernels for the GPU surface-flow solver.
Definition FluidTarget.h:12
Owned secondary particle; it contributes no mass or pressure to the liquid solver.
float life
Remaining lifetime in (0,86400] seconds.
Strict version-1 diffuse pool state; unknown fields and versions are rejected.
std::vector< VolumeFluidDiffuseParticle > particles