载入中...
搜索中...
未找到
ClothModel.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
6#include "common/Value.h"
7
8#include <cstdint>
9#include <span>
10#include <string>
11#include <string_view>
12#include <vector>
13
14namespace eve::physics {
15
17enum class ClothConstraintKind : uint8_t {
19 Shear,
20 Bend,
21};
22
25 float x = 0.f;
26 float y = 0.f;
27 float z = 0.f;
28 float inverseMass = 1.f;
29};
30
33 int vertices[3] = {0, 0, 0};
34};
35
43
46 int a = 0;
47 int b = 0;
48 int oppositeA = 0;
49 int oppositeB = 0;
50};
51
54 int particle = 0;
55 int anchor = 0;
56 float maxLength = 0.f;
57};
58
74public:
75 static constexpr uint32_t SchemaVersion = 1;
76
84 [[nodiscard("check cloth model bake outcome")]]
85 static eve::Result<ClothModel> fromTriangles(std::span<const float> positions, std::span<const int> triangleIndices,
86 std::span<const float> inverseMasses = {});
87
98 [[nodiscard("check cloth grid model outcome")]]
99 static eve::Result<ClothModel> grid(int cols, int rows, float spacing, float originX, float originY, float originZ);
100
102 [[nodiscard("check cloth model decode outcome")]]
103 static eve::Result<ClothModel> fromValue(const eve::Value& value);
104
106 [[nodiscard("check cloth model JSON decode outcome")]]
107 static eve::Result<ClothModel> fromJson(std::string_view json);
108
110 [[nodiscard]] eve::Value toValue() const;
111
113 [[nodiscard("check cloth model JSON encode outcome")]]
114 eve::Result<std::string> toJson() const;
115
117 [[nodiscard]] uint32_t schemaVersion() const noexcept { return SchemaVersion; }
119 [[nodiscard]] std::span<const ClothModelParticle> particles() const noexcept { return particles_; }
121 [[nodiscard]] std::span<const ClothModelTriangle> triangles() const noexcept { return triangles_; }
123 [[nodiscard]] std::span<const ClothModelDistanceConstraint> distanceConstraints() const noexcept {
124 return distanceConstraints_;
125 }
127 [[nodiscard]] std::span<const ClothModelFoldConstraint> foldConstraints() const noexcept {
128 return foldConstraints_;
129 }
131 [[nodiscard]] std::span<const ClothModelTetherConstraint> tetherConstraints() const noexcept {
132 return tetherConstraints_;
133 }
135 [[nodiscard]] bool isClosed() const noexcept { return closed_; }
137 [[nodiscard]] float restVolume() const noexcept { return restVolume_; }
139 [[nodiscard]] int gridCols() const noexcept { return gridCols_; }
141 [[nodiscard]] int gridRows() const noexcept { return gridRows_; }
143 [[nodiscard]] float gridSpacing() const noexcept { return gridSpacing_; }
144
145private:
146 std::vector<ClothModelParticle> particles_;
147 std::vector<ClothModelTriangle> triangles_;
148 std::vector<ClothModelDistanceConstraint> distanceConstraints_;
149 std::vector<ClothModelFoldConstraint> foldConstraints_;
150 std::vector<ClothModelTetherConstraint> tetherConstraints_;
151 bool closed_ = false;
152 float restVolume_ = 0.f;
153 int gridCols_ = 0;
154 int gridRows_ = 0;
155 float gridSpacing_ = 0.f;
156};
157
158} // namespace eve::physics
double value
#define EVENGINE_API_DOMAINS
Definition Export.h:110
int rows
int cols
std::vector< float > positions
Move-only, checked operation results for the common layer.
int spacing
Owning, renderer-independent dynamic values.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
Reusable, validated cloth simulation asset.
Definition ClothModel.h:73
uint32_t schemaVersion() const noexcept
Schema version used by serialization adapters.
Definition ClothModel.h:117
std::span< const ClothModelParticle > particles() const noexcept
Read-only particles, valid until this model is destroyed or assigned.
Definition ClothModel.h:119
std::span< const ClothModelTetherConstraint > tetherConstraints() const noexcept
Read-only geodesic tethers generated from fixed particles.
Definition ClothModel.h:131
std::span< const ClothModelFoldConstraint > foldConstraints() const noexcept
Read-only fold constraints, valid until this model is destroyed or assigned.
Definition ClothModel.h:127
int gridRows() const noexcept
Grid row metadata, or zero for an arbitrary mesh.
Definition ClothModel.h:141
float gridSpacing() const noexcept
Grid spacing metadata, or zero for an arbitrary mesh.
Definition ClothModel.h:143
std::span< const ClothModelTriangle > triangles() const noexcept
Read-only triangles, valid until this model is destroyed or assigned.
Definition ClothModel.h:121
std::span< const ClothModelDistanceConstraint > distanceConstraints() const noexcept
Read-only distance constraints, valid until this model is destroyed or assigned.
Definition ClothModel.h:123
int gridCols() const noexcept
Grid column metadata, or zero for an arbitrary mesh.
Definition ClothModel.h:139
bool isClosed() const noexcept
Whether every topology edge belongs to exactly two triangles.
Definition ClothModel.h:135
float restVolume() const noexcept
Signed rest volume for a consistently wound closed mesh, otherwise zero.
Definition ClothModel.h:137
Optional physics backend for vehicle mobility and body attach.
Definition Climbing.h:36
ClothConstraintKind
Type of a precomputed distance constraint in a cloth model.
Definition ClothModel.h:17
Precomputed rest-length constraint between two cloth particles.
Definition ClothModel.h:37
Adjacent-triangle fold relationship around the shared edge (a,b).
Definition ClothModel.h:45
Immutable rest-space particle stored by a ClothModel.
Definition ClothModel.h:24
Geodesic maximum-distance constraint from a particle to a fixed anchor.
Definition ClothModel.h:53
Triangle indices into a ClothModel particle array.
Definition ClothModel.h:32