载入中...
搜索中...
未找到
VolumeFluidCoupling.cpp
浏览该文件的文档.
26Result<void> VolumeFluidCoupling::attach(physics::Body3D& body, const VolumeFluidCollider& localShape) {
44Result<void> VolumeFluidCoupling::setImpulseLimits(float maximumLinearDelta, float maximumAngularDelta) {
45 if (!std::isfinite(maximumLinearDelta) || maximumLinearDelta < .01f || maximumLinearDelta > 1000.f ||
46 !std::isfinite(maximumAngularDelta) || maximumAngularDelta < .01f || maximumAngularDelta > 10000.f)
48 DiagnosticCode::InvalidArgument, "Invalid rigid impulse velocity-change limits", "fluids.volume.coupling"));
54Result<unsigned> VolumeFluidCoupling::step(physics::World3D& world, VolumeFluid& fluid, float dt, unsigned substeps,
58 Diagnostic::error(DiagnosticCode::StaleHandle, "Rigid world is no longer valid", "fluids.volume.coupling"));
77 const auto center = body->localToWorldPointOwned(sample.center.x, sample.center.y, sample.center.z);
79 const auto velocity = body->getLocalPointVelocityOwned(sample.center.x, sample.center.y, sample.center.z);
86 orientation * glm::quat(sample.rotation.w, sample.rotation.x, sample.rotation.y, sample.rotation.z);
104 std::lower_bound(labels.begin(), labels.end(), std::pair<unsigned, size_t>{contact.colliderLabel, 0});
113 std::lower_bound(labels.begin(), labels.end(), std::pair<unsigned, size_t>{reaction.colliderLabel, 0});
135 std::max({std::abs(localInertia[0][0]), std::abs(localInertia[0][1]), std::abs(localInertia[0][2]),
Typed composition link from a gameplay entity to a physics body.
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
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
void detach(unsigned label)
Removes a label; absent labels are a successful no-op.
Definition VolumeFluidCoupling.cpp:41
Result< unsigned > step(physics::World3D &world, VolumeFluid &fluid, float dt, unsigned substeps=4, std::span< const VolumeFluidThermalRule > rules={})
Resolves all links, samples poses, advances fluid and applies opposite impulses once.
Definition VolumeFluidCoupling.cpp:54
unsigned lastClampedBodyCount() const
Returns how many linked bodies had a linear or angular impulse scaled in the last successful step.
Definition VolumeFluidCoupling.cpp:53
Result< void > setImpulseLimits(float maximumLinearDelta, float maximumAngularDelta)
Sets per-step rigid velocity-change limits used after impulse aggregation.
Definition VolumeFluidCoupling.cpp:44
Result< void > attach(physics::Body3D &body, const VolumeFluidCollider &localShape)
Registers a live body and local-space shape; labels must be unique, maximum 1024.
Definition VolumeFluidCoupling.cpp:26
CPU position-based free-volume fluid with a bounded spatial grid. @ownership Owns all particle state;...
Definition VolumeFluid.h:517
static Result< std::unique_ptr< VolumeFluid > > create(const VolumeFluidSettings &settings)
Validates settings before allocating an owning solver; errors publish no state.
Definition VolumeFluid.cpp:7
std::span< const VolumeFluidAttachmentReaction > attachmentReactions() const
Borrows attachment-constraint reactions from the last completed step.
Definition VolumeFluidColliders.cpp:293
Result< void > stepWithColliders(float seconds, unsigned substeps, std::span< const VolumeFluidCollider > colliders, std::span< const VolumeFluidThermalRule > rules={})
Atomically updates collider samples and advances; failed steps restore prior samples and particles.
Definition VolumeFluid.cpp:624
std::vector< VolumeFluidContact > contacts() const
Returns owning events from the last completed step; no borrowed world pointers are stored.
Definition VolumeFluidColliders.cpp:291
3D rigid body (Box3D) in meter-space coordinates (+Y up by convention). Owned by a World3D; create pr...
Definition Body3D.h:24
Box3D rigid-body world. Script coordinates are meters (Box3D native), unlike 2D World which uses pixe...
Definition World3D.h:63
@ InvalidArgument
@ StaleHandle
Definition Container.h:602
Owned obstacle sample; the caller updates moving obstacles before stepping.
Definition VolumeFluid.h:139
VolumeFluidCollider shape
Definition VolumeFluidCoupling.cpp:14
physics::PhysicsLink link
Definition VolumeFluidCoupling.cpp:13
std::vector< glm::vec3 > angular
Definition VolumeFluidCoupling.cpp:19
std::vector< glm::vec3 > centers
Definition VolumeFluidCoupling.cpp:19
std::vector< VolumeFluidCollider > samples
Definition VolumeFluidCoupling.cpp:18
std::vector< std::pair< unsigned, size_t > > labels
Definition VolumeFluidCoupling.cpp:20
float maximumAngularDelta
Definition VolumeFluidCoupling.cpp:21
std::vector< physics::Body3D * > bodies
Definition VolumeFluidCoupling.cpp:17
std::vector< Binding > bindings
Definition VolumeFluidCoupling.cpp:16
std::vector< glm::vec3 > linear
Definition VolumeFluidCoupling.cpp:19
float maximumLinearDelta
Definition VolumeFluidCoupling.cpp:21
unsigned clampedBodyCount
Definition VolumeFluidCoupling.cpp:22
Meter-space (+Y up) volume-fluid material and solver policy.
Definition VolumeFluid.h:82
unsigned capacity
Maximum live particles; admission fails atomically at capacity.
Definition VolumeFluid.h:84
Generation-qualified relationship between one world and one body.
Definition PhysicsLink.h:33
static eve::Result< PhysicsLink > fromBody(const Body &body)
Creates a link from a live 2D body.
Definition PhysicsLink.cpp:39