载入中...
搜索中...
未找到
SurfaceFluidContracts.cpp
浏览该文件的文档.
13eve::Result<void> applied() { return eve::Result<void>::success(eve::Status::success(eve::StatusCode::Applied)); }
15eve::Result<void> validateTick(const eve::SimulationStep& step, eve::SimulationTick lastTick, const char* path) {
18 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Surface-fluid duration must be finite and non-negative", path));
21 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid simulation tick must increase strictly", path));
28 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Surface pose duration must be finite and non-negative", path));
36 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.surfaceSimulation.solver"));
44int FluidSimulationAdapter::particleCount() const noexcept { return solver_ ? solver_->particleCount() : 0; }
57 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.surfaceConstraint.binding"));
59 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Surface constraint topology is not a valid triangle mesh", "fluids.surfaceConstraint.topology"));
65 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.surfaceConstraint.binding"));
70eve::Result<void> FluidSurfaceConstraintAdapter::setDeformedPositions(const std::vector<glm::vec3>& worldPositions) {
72 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.surfaceConstraint.binding"));
74 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Deformed surface vertex count does not match topology", "fluids.surfaceConstraint.pose"));
78bool FluidSurfaceConstraintAdapter::isValid() const noexcept { return binding_ && binding_->isValid(); }
80eve::Result<SurfaceSample> FluidSurfaceConstraintAdapter::evaluate(const SurfaceLocation& location,
92 return eve::Result<SurfaceSample>::success(binding_->evaluate(location, static_cast<float>(poseDelta.seconds())));
95eve::Result<SurfaceLocation> FluidSurfaceConstraintAdapter::project(const glm::vec3& worldPosition,
99 eve::DiagnosticCode::PreconditionViolation, "Cannot project against an invalid surface constraint",
128ScreenSpaceSurfaceReconstructionAdapter::ScreenSpaceSurfaceReconstructionAdapter(const FluidSurfaceParams& params,
130 if (params.width <= 0 || params.height <= 0) throw eve::Exception("Surface SSF output dimensions must be positive");
136eve::Result<void> ScreenSpaceSurfaceReconstructionAdapter::reconstruct(std::span<const glm::vec3> positions,
139 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.screenSpaceReconstruction.renderer"));
141 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Screen-space particle radius must be finite and positive", "fluids.screenSpaceReconstruction.particleRadius"));
144 return eve::Result<void>::failure(eve::Diagnostic::error(eve::DiagnosticCode::InvalidArgument, "Screen-space particle positions must be finite", "fluids.screenSpaceReconstruction.positions"));
151eve::Result<void> ScreenSpaceSurfaceReconstructionAdapter::occlude(std::span<const float> sceneDepth, float depthBias) {
153 eve::DiagnosticCode::PreconditionViolation, "Surface-fluid adapter has no live borrowed solver", "fluids.screenSpaceReconstruction.renderer"));
157int ScreenSpaceSurfaceReconstructionAdapter::width() const noexcept { return renderer_ ? renderer_->getWidth() : 0; }
159int ScreenSpaceSurfaceReconstructionAdapter::height() const noexcept { return renderer_ ? renderer_->getHeight() : 0; }
177bool ScreenSpaceSurfaceReconstructionAdapter::usingGpu() const noexcept { return renderer_ && renderer_->usingGpu(); }
Domain contracts separating surface simulation, constraints, and SSF presentation.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
double seconds() const noexcept
Return this duration as seconds for legacy/presentation APIs.
Definition Time.cpp:28
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
eve::Result< void > step(const eve::SimulationStep &step) override
Step.
Definition SurfaceFluidContracts.cpp:34
std::span< const FluidParticle > particles() const noexcept override
Particles.
Definition SurfaceFluidContracts.cpp:46
void step(float dt)
Advance the simulation by dt seconds (params.iterations substeps).
Definition FluidSimulation.cpp:80
bool build(const std::vector< glm::vec3 > &positions, const std::vector< uint32_t > &indices, const std::vector< glm::vec2 > &uvs={})
Build topology and initialize the current and previous poses.
Definition FluidSurfaceBinding.cpp:80
void setTransform(const glm::mat4 &transform)
Apply a new rigid pose and preserve the old pose for velocity queries.
Definition FluidSurfaceBinding.cpp:133
SurfaceSample evaluate(const SurfaceLocation &location, float dt) const
Evaluate a surface address in the current and previous poses.
Definition FluidSurfaceBinding.cpp:194
bool setDeformedPositions(const std::vector< glm::vec3 > &worldPositions)
Supply a new deformed world-space pose and preserve the previous pose.
Definition FluidSurfaceBinding.cpp:140
SurfaceWalkResult walkAcrossSurface(const SurfaceLocation &start, const glm::vec3 &worldDisplacement, int maxCrossings=16) const
Move a location by a world-space displacement, crossing triangle edges.
Definition FluidSurfaceBinding.cpp:240
bool project(const glm::vec3 &worldPosition, float maxDistance, SurfaceLocation &outLocation) const
Find the closest material point on the current surface.
Definition FluidSurfaceBinding.cpp:216
eve::Result< SurfaceLocation > project(const glm::vec3 &worldPosition, float maxDistance) const override
Project.
Definition SurfaceFluidContracts.cpp:95
eve::Result< void > setDeformedPositions(const std::vector< glm::vec3 > &worldPositions) override
Sets the deformed positions.
Definition SurfaceFluidContracts.cpp:70
eve::Result< void > setTransform(const glm::mat4 &transform) override
Sets the transform.
Definition SurfaceFluidContracts.cpp:63
eve::Result< void > build(const std::vector< glm::vec3 > &positions, const std::vector< std::uint32_t > &indices, const std::vector< glm::vec2 > &uvs={}) override
Builds .
Definition SurfaceFluidContracts.cpp:53
eve::Result< SurfaceWalkResult > walk(const SurfaceLocation &start, const glm::vec3 &displacement, int maxCrossings=16) const override
Walk.
Definition SurfaceFluidContracts.cpp:109
eve::Result< SurfaceSample > evaluate(const SurfaceLocation &location, eve::Duration poseDelta) const override
Evaluate.
Definition SurfaceFluidContracts.cpp:80
std::span< const glm::vec3 > normals() const noexcept override
Normals.
Definition SurfaceFluidContracts.cpp:165
std::span< const float > depth() const noexcept override
Depth.
Definition SurfaceFluidContracts.cpp:161
eve::Result< void > reconstruct(std::span< const glm::vec3 > positions, float particleRadius) override
Reconstruct.
Definition SurfaceFluidContracts.cpp:136
~ScreenSpaceSurfaceReconstructionAdapter() override
Releases ScreenSpaceSurfaceReconstructionAdapter resources.
std::span< const float > thickness() const noexcept override
Thickness.
Definition SurfaceFluidContracts.cpp:169
std::span< const std::uint8_t > color() const noexcept override
Color.
Definition SurfaceFluidContracts.cpp:173
eve::Result< void > occlude(std::span< const float > sceneDepth, float depthBias=0.001f) override
Occlude.
Definition SurfaceFluidContracts.cpp:151
ScreenSpaceSurfaceReconstructionAdapter(const FluidSurfaceParams ¶ms, bool preferGpu)
Constructs a ScreenSpaceSurfaceReconstructionAdapter.
Definition SurfaceFluidContracts.cpp:128
Result< T > applied(T value, std::vector< Diagnostic > diagnostics={})
Construct an Applied result with an owning payload and optional diagnostics.
Definition EditingResult.h:43
@ InvalidArgument
@ NotFound
@ PreconditionViolation
@ Applied
Camera + reconstruction tuning for the SSF pipeline.
Definition FluidSurfaceRenderer.h:61
Stable material-space address of a point on a triangle surface.
Definition FluidSurfaceBinding.h:13