载入中...
搜索中...
未找到
VolumeFluidFactoryBindings.cpp
浏览该文件的文档.
14 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidWindZone(VolumeFluidWindZone{}));
17 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidCollider(VolumeFluidCollider{}));
22 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidSdfCollider(collider));
27 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidHeightFieldCollider(collider));
30 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidSdfPose(VolumeFluidSdfPose{}));
33 cls.addFunc("volumeSdfColliderFromModel", [vm](Fluids*, model3d::ModelData* model, int meshIndex, float sx,
40 if (!model || meshIndex < 0 || meshIndex >= model->getMeshCount() || resolution < 8 || resolution > 128)
42 const int vertexCount = model->getVertexCount(meshIndex), faceCount = model->getFaceCount(meshIndex);
48 if (!std::isfinite(sx) || !std::isfinite(sy) || !std::isfinite(sz) || sx == 0 || sy == 0 || sz == 0)
61 if (index < 0 || index >= vertexCount) return failure("Model contains invalid SDF triangle index");
72 collider.sdf = MeshSdf::makeFromTriangles(vertices, indices, {resolution, resolution, resolution});
73 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidSdfCollider(collider));
75 cls.addFunc("volumeEmissionFromModel", [vm](Fluids*, model3d::ModelData* model, int meshIndex, float sx, float sy,
82 if (!model || meshIndex < 0 || meshIndex >= model->getMeshCount()) return failure("Invalid model mesh slot");
83 const int vertexCount = model->getVertexCount(meshIndex), faceCount = model->getFaceCount(meshIndex);
109 cls.addFunc("volumeEmissionFromImage", [vm](Fluids*, image::ImageData* image, float pixelScale, float maximumSize,
111 if (!image || image->getWidth() <= 0 || image->getHeight() <= 0 || image->getFormat() != "RGBA8" ||
134 buildVolumeFluidImageDistribution(pixels, width, height, pixelScale, maximumSize, spacing, threshold);
142 cls.addFunc("volumeEmissionFromSphere", [vm](Fluids*, float radius, float spacing, bool surface) {
150 cls.addFunc("volumeEmissionFromCube", [vm](Fluids*, float sx, float sy, float sz, float spacing, bool surface) {
158 cls.addFunc("volumeEmissionFromEdge", [vm](Fluids*, float length, float spacing, float radialVelocityDegrees) {
166 cls.addFunc("volumeEmissionFromDisk", [vm](Fluids*, float radius, float spacing, bool edgeEmission) {
175 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluidEmission(VolumeFluidEmission{}));
177 cls.addFunc("composeVolumeEmitterShapes", [vm](Fluids*, ssq::Object baseObject, ssq::Object shapesObject) {
228 cls.addFunc("volumeEmitterBlueprintMetrics", [vm](Fluids*, float resolution, float restDensity, float smoothing) {
238 return script::projectStatusResult(vm, Status::success(), encodeVolumeFluid(VolumeFluidSnapshot{}));
250 auto result = script::projectStatusResult(vm, Status::success(), std::move(instance).takeValue());
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 Status failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
void set(const std::string &key, Value value)
Insert or replace an object member.
Definition Value.cpp:118
static MeshSdf makeSphere(const glm::vec3 ¢er, float radius, const glm::ivec3 &dims)
Bake an analytic sphere into the field.
Definition FluidSdf.cpp:130
static MeshSdf makeFromTriangles(const std::vector< glm::vec3 > &positions, const std::vector< uint32_t > &indices, const glm::ivec3 &dims)
Voxelize a closed triangle mesh.
Definition FluidSdf.cpp:166
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
CPU-side decoded 3D model (Assimp scene owned via medialoader::ModelScene). Does not upload to GPU — ...
Definition ModelData.h:39
Value encodeVolumeFluid(const VolumeFluidSnapshot &snapshot)
Canonical schema-17 value projection, shared by JSON, scripts and authoring.
Definition VolumeFluidCodec.cpp:16
Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidEdgeDistribution(float length, float spacing, float radialVelocityDegrees)
Builds Fluid3D's edge lattice with per-sample radial velocity directions.
Definition VolumeFluidEmitter.cpp:529
Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidCubeDistribution(glm::vec3 size, float spacing, bool surface)
Builds an Fluid3D-compatible box surface or volume lattice during setup.
Definition VolumeFluidEmitter.cpp:497
Result< VolumeGranularEmitterBlueprint3D > decodeVolumeGranularEmitterBlueprint3D(const Value &value)
Strictly decodes one owning Fluid3D granular-emitter blueprint value.
Definition VolumeFluidCodec.cpp:233
Value encodeVolumeFluidEmitterBlueprint3D(const VolumeFluidEmitterBlueprint3D &blueprint)
Projects default or caller-prepared Fluid3D-emitter blueprint values.
Definition VolumeFluidCodec.cpp:218
Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidDiskDistribution(float radius, float spacing, bool edgeEmission)
Builds Fluid3D's concentric disk or circumference-only distribution.
Definition VolumeFluidEmitter.cpp:549
EVENGINE_API_DOMAINS Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidMeshDistribution(std::span< const glm::vec3 > vertices, std::span< const uint32_t > indices, glm::vec3 scale, float spacing)
Voxelizes indexed triangles, returning surface and enclosed interior cell centers.
Definition VolumeFluidMeshEmitter.cpp:30
Value encodeVolumeFluidWindZone(const VolumeFluidWindZone &zone)
Projects one complete wind-zone description for script construction.
Definition VolumeFluidCodec.cpp:167
Value encodeVolumeFluidCollider(const VolumeFluidCollider &collider)
Projects an owning collider description for script construction.
Definition VolumeFluidCodec.cpp:130
Value encodeVolumeFluidHeightFieldCollider(const VolumeFluidHeightFieldCollider &collider)
Projects one complete owning regular height field.
Definition VolumeFluidCodec.cpp:132
Value encodeVolumeFluidSdfCollider(const VolumeFluidSdfCollider &collider)
Projects one complete owning SDF collider.
Definition VolumeFluidCodec.cpp:131
Value encodeVolumeFluidSdfPose(const VolumeFluidSdfPose &pose)
Projects one transform-only SDF update for script construction.
Definition VolumeFluidCodec.cpp:133
Result< VolumeFluidEmission > composeVolumeFluidEmitterShapes(const VolumeFluidEmission &base, std::span< const VolumeFluidEmission > shapes)
Builds one emitter distribution from an ordered set of Fluid3D emitter shapes.
Definition VolumeFluidEmitter.cpp:579
@ Distribution
Value encodeVolumeFluidThermalRule(const VolumeFluidThermalRule &rule)
Owning default-rule projection for script construction.
Definition VolumeFluidCodec.cpp:170
Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidSphereDistribution(float radius, float spacing, bool surface)
Builds an Fluid3D-compatible spherical surface or volume lattice during setup.
Definition VolumeFluidEmitter.cpp:444
Result< VolumeFluidEmission > decodeVolumeFluidEmission(const Value &value)
Strict structural decode; nozzle/material domain validation occurs atomically at emission.
Definition VolumeFluidCodec.cpp:354
Value encodeVolumeFluidEmitterBlueprintApplication3D(const VolumeFluidEmitterBlueprintApplication3D &application)
Projects the complete native solver/emission setup produced from a blueprint.
Definition VolumeFluidCodec.cpp:244
Result< std::vector< VolumeFluidDistributionPoint > > buildVolumeFluidImageDistribution(std::span< const glm::vec4 > pixels, unsigned width, unsigned height, float pixelScale, float maximumSize, float spacing, float alphaThreshold)
Precomputes a bilinear alpha-masked image distribution on a spacing lattice.
Definition VolumeFluidEmitter.cpp:633
Value encodeVolumeFluidEmission(const VolumeFluidEmission &emission)
Encodes a version-9 emission description including precomputed points and particle state.
Definition VolumeFluidCodec.cpp:346
Result< VolumeFluidEmitterBlueprintMetrics > evaluateVolumeFluidEmitterBlueprint3D(float resolution, float restDensity, float smoothing)
Evaluates Fluid3DEmitterBlueprintBase/Fluid3DEmitterBlueprint formulas in 3D.
Definition VolumeFluidEmitter.cpp:145
Result< VolumeFluidEmitterBlueprintApplication3D > prepareVolumeFluidEmitterBlueprint3D(const VolumeFluidEmitterBlueprint3D &blueprint)
Atomically maps every Fluid3DEmitterBlueprint field to native 3D setup values.
Definition VolumeFluidEmitter.cpp:159
Result< VolumeFluidEmitterBlueprintApplication3D > prepareVolumeGranularEmitterBlueprint3D(const VolumeGranularEmitterBlueprint3D &blueprint)
Atomically maps an Fluid3DGranularEmitterBlueprint to owned native 3D setup values.
Definition VolumeFluidEmitter.cpp:195
Value encodeVolumeGranularEmitterBlueprint3D(const VolumeGranularEmitterBlueprint3D &blueprint)
Projects default or caller-prepared Fluid3D granular-emitter blueprint values.
Definition VolumeFluidCodec.cpp:230
void exposeVolumeFluidFactory(ssq::Class &cls)
Registers volume-fluid factories on the existing Fluids class.
Definition VolumeFluidFactoryBindings.cpp:7
Result< VolumeFluidEmitterBlueprint3D > decodeVolumeFluidEmitterBlueprint3D(const Value &value)
Strictly decodes one owning Fluid3D-emitter blueprint value.
Definition VolumeFluidCodec.cpp:219
ssq::Table projectStatusResult(HSQUIRRELVM vm, const Status &status)
Project a checked native status that carries no payload.
Definition SquirrelBinding.cpp:454
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Definition SquirrelBinding.cpp:470
Result< Value > valueFromSquirrel(HSQUIRRELVM vm, SQInteger index, const SquirrelValueOptions &options)
Convert one Squirrel value into the canonical owning Value tree.
Definition SquirrelBinding.cpp:342
@ InvalidArgument
Owned obstacle sample; the caller updates moving obstacles before stepping.
Definition VolumeFluid.h:139
Value-owned emission description; +Z is mapped to direction.
Definition VolumeFluidEmitter.h:105
VolumeFluidParticle prototype
Material/color/data/lifetime copied to emitted particles; position/velocity are generated.
Definition VolumeFluidEmitter.h:122
std::vector< VolumeFluidDistributionPoint > distribution
Precomputed shape points, used only by Distribution; maximum 4096, copied by value.
Definition VolumeFluidEmitter.h:126
VolumeFluidEmissionShape shape
Definition VolumeFluidEmitter.h:106
Owning Fluid3DEmitterBlueprint values used to prepare a native 3D emitter.
Definition VolumeFluidEmitter.h:25
Owned regular-grid terrain collider matching Fluid3D height-field sample layout.
Definition VolumeFluid.h:204
std::vector< float > heights
Row-major samples indexed as z * resolution.x + x, in normalized [0,1] height units.
Definition VolumeFluid.h:207
glm::vec4 color
Linear RGBA color and four diffusing application channels.
Definition VolumeFluid.h:108
Owned sampled mesh/SDF collider with a uniform world transform.
Definition VolumeFluid.h:179
Transient transform update for one owned SDF collider, identified by stable label.
Definition VolumeFluid.h:231
Canonical version-20 owning state; older codecs migrate collider, attachment, stitch,...
Definition VolumeFluid.h:493
One-step contact transfer into user channels x/y; negative rate heats, positive cools.
Definition VolumeFluid.h:308
Owning description of one transient ambient or spherical wind zone.
Definition VolumeFluid.h:123
Owning Fluid3DGranularEmitterBlueprint values used to prepare a native 3D emitter.
Definition VolumeFluidEmitter.h:35