43 VertexAttributes(
float inCompliance,
float inShearCompliance,
float inBendCompliance,
ELRAType inLRAType = ELRAType::None,
float inLRAMaxDistanceMultiplier = 1.0f) : mCompliance(inCompliance), mShearCompliance(inShearCompliance), mBendCompliance(inBendCompliance), mLRAType(inLRAType), mLRAMaxDistanceMultiplier(inLRAMaxDistanceMultiplier) { }
45 float mCompliance = 0.0f;
46 float mShearCompliance = 0.0f;
47 float mBendCompliance = FLT_MAX;
49 float mLRAMaxDistanceMultiplier = 1.0f;
60 void CalculateEdgeLengths();
64 void CalculateLRALengths(
float inMaxDistanceMultiplier = 1.0f);
67 void CalculateBendConstraintConstants();
70 void CalculateVolumeConstraintVolumes();
73 void CalculateSkinnedConstraintNormals();
96 void SaveBinaryState(
StreamOut &inStream)
const;
99 void RestoreBinaryState(
StreamIn &inStream);
127 Vertex(const
Float3 &inPosition, const
Float3 &inVelocity =
Float3(0, 0, 0),
float inInvMass = 1.0f) : mPosition(inPosition), mVelocity(inVelocity), mInvMass(inInvMass) { }
131 float mInvMass = 1.0f;
141 Face(
uint32 inVertex1,
uint32 inVertex2,
uint32 inVertex3,
uint32 inMaterialIndex = 0) : mVertex { inVertex1, inVertex2, inVertex3 }, mMaterialIndex(inMaterialIndex) { }
144 bool IsDegenerate()
const {
return mVertex[0] == mVertex[1] || mVertex[0] == mVertex[2] || mVertex[1] == mVertex[2]; }
157 Edge(
uint32 inVertex1,
uint32 inVertex2,
float inCompliance = 0.0f) : mVertex { inVertex1, inVertex2 }, mCompliance(inCompliance) { }
163 float mRestLength = 1.0f;
164 float mCompliance = 0.0f;
191 DihedralBend(
uint32 inVertex1,
uint32 inVertex2,
uint32 inVertex3,
uint32 inVertex4,
float inCompliance = 0.0f) : mVertex { inVertex1, inVertex2, inVertex3, inVertex4 }, mCompliance(inCompliance) { }
197 float mCompliance = 0.0f;
198 float mInitialAngle = 0.0f;
208 Volume(
uint32 inVertex1,
uint32 inVertex2,
uint32 inVertex3,
uint32 inVertex4,
float inCompliance = 0.0f) : mVertex { inVertex1, inVertex2, inVertex3, inVertex4 }, mCompliance(inCompliance) { }
214 float mSixRestVolume = 1.0f;
215 float mCompliance = 0.0f;
240 SkinWeight(
uint32 inInvBindIndex,
float inWeight) : mInvBindIndex(inInvBindIndex), mWeight(inWeight) { }
243 float mWeight = 0.0f;
254 Skinned(
uint32 inVertex,
float inMaxDistance,
float inBackStopDistance,
float inBackStopRadius) : mVertex(inVertex), mMaxDistance(inMaxDistance), mBackStopDistance(inBackStopDistance), mBackStopRadius(inBackStopRadius) { }
271 static constexpr uint cMaxSkinWeights = 4;
275 float mMaxDistance = FLT_MAX;
276 float mBackStopDistance = FLT_MAX;
277 float mBackStopRadius = 40.0f;
290 LRA(
uint32 inVertex1,
uint32 inVertex2,
float inMaxDistance) : mVertex { inVertex1, inVertex2 }, mMaxDistance(inMaxDistance) { }
296 float mMaxDistance = 0.0f;
311 float mVertexRadius = 0.0f;
317 void CalculateClosestKinematic();
320 struct ClosestKinematic
322 uint32 mVertex = 0xffffffff;
323 float mDistance = FLT_MAX;
331 uint mDihedralBendEndIndex;
332 uint mVolumeEndIndex;
333 uint mSkinnedEndIndex;
@ None
No degrees of freedom are allowed. Note that this is not valid and will crash. Use a static body inst...
#define JPH_EXPORT
Definition Core.h:271
unsigned int uint
Definition Core.h:481
#define JPH_NAMESPACE_END
Definition Core.h:414
std::uint32_t uint32
Definition Core.h:484
#define JPH_NAMESPACE_BEGIN
Definition Core.h:408
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
JPH_INLINE constexpr float DegreesToRadians(float inV)
Convert a value from degrees to radians.
Definition Math.h:16
#define JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(linkage, class_name)
Definition SerializableObject.h:80
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition Mat44.h:13
static JPH_INLINE Mat44 sIdentity()
Identity matrix.
Definition Mat44.inl:35
static RefConst< PhysicsMaterial > sDefault
Default material that is used when a shape has no materials defined.
Definition PhysicsMaterial.h:31
Definition Reference.h:107
Definition Reference.h:35
Helper class that either contains a valid result or an error.
Definition Result.h:12
This class contains the runtime information of a soft body.
Definition SoftBodyMotionProperties.h:35
An inverse bind matrix take a skinned vertex from its bind pose into joint local space.
Definition SoftBodySharedSettings.h:220
InvBind()=default
Constructor.
InvBind(uint32 inJointIndex, Mat44Arg inInvBind)
Definition SoftBodySharedSettings.h:226
Definition SoftBodySharedSettings.h:284
uint32 GetMinVertexIndex() const
Return the lowest vertex index of this constraint.
Definition SoftBodySharedSettings.h:293
LRA()=default
Constructor.
LRA(uint32 inVertex1, uint32 inVertex2, float inMaxDistance)
Definition SoftBodySharedSettings.h:290
Information about the optimization of the soft body, the indices of certain elements may have changed...
Definition SoftBodySharedSettings.h:77
Array< uint > mLRARemap
Maps old LRA index to new LRA index.
Definition SoftBodySharedSettings.h:80
Array< uint > mVolumeRemap
Maps old volume constraint index to new volume constraint index.
Definition SoftBodySharedSettings.h:82
Array< uint > mDihedralBendRemap
Maps old dihedral bend index to new dihedral bend index.
Definition SoftBodySharedSettings.h:81
Array< uint > mSkinnedRemap
Maps old skinned constraint index to new skinned constraint index.
Definition SoftBodySharedSettings.h:83
Array< uint > mEdgeRemap
Maps old edge index to new edge index.
Definition SoftBodySharedSettings.h:79
A joint and its skin weight.
Definition SoftBodySharedSettings.h:234
SkinWeight()=default
Constructor.
SkinWeight(uint32 inInvBindIndex, float inWeight)
Definition SoftBodySharedSettings.h:240
A constraint that skins a vertex to joints and limits the distance that the simulated vertex can trav...
Definition SoftBodySharedSettings.h:248
void NormalizeWeights()
Normalize the weights so that they add up to 1.
Definition SoftBodySharedSettings.h:257
Skinned()=default
Constructor.
Skinned(uint32 inVertex, float inMaxDistance, float inBackStopDistance, float inBackStopRadius)
Definition SoftBodySharedSettings.h:254
Definition SoftBodySharedSettings.h:16
Array< Vertex > mVertices
The list of vertices or particles of the body.
Definition SoftBodySharedSettings.h:302
ELRAType
The type of long range attachment constraint to create.
Definition SoftBodySharedSettings.h:30
Array< LRA > mLRAConstraints
The list of long range attachment constraints.
Definition SoftBodySharedSettings.h:309
EBendType
Which type of bend constraint should be created.
Definition SoftBodySharedSettings.h:22
Array< Skinned > mSkinnedConstraints
The list of vertices that are constrained to a skinned vertex.
Definition SoftBodySharedSettings.h:307
void Optimize()
Optimize the soft body settings without results.
Definition SoftBodySharedSettings.h:90
Array< Face > mFaces
The list of faces of the body.
Definition SoftBodySharedSettings.h:303
Array< DihedralBend > mDihedralBendConstraints
The list of dihedral bend constraints of the body.
Definition SoftBodySharedSettings.h:305
Array< Volume > mVolumeConstraints
The list of volume constraints of the body that keep the volume of tetrahedra in the soft body consta...
Definition SoftBodySharedSettings.h:306
Array< Edge > mEdgeConstraints
The list of edges or springs of the body.
Definition SoftBodySharedSettings.h:304
Array< InvBind > mInvBindMatrices
The list of inverse bind matrices for skinning vertices.
Definition SoftBodySharedSettings.h:308
void AddFace(const Face &inFace)
Add a face to this soft body.
Definition SoftBodySharedSettings.h:300
Simple binary input stream.
Definition StreamIn.h:13
Simple binary output stream.
Definition StreamOut.h:13
Definition UnorderedMap.h:30
Definition SoftBodySharedSettings.h:186
uint32 GetMinVertexIndex() const
Return the lowest vertex index of this constraint.
Definition SoftBodySharedSettings.h:194
An edge keeps two vertices at a constant distance using a spring: |x1 - x2| = rest length.
Definition SoftBodySharedSettings.h:152
uint32 GetMinVertexIndex() const
Return the lowest vertex index of this constraint.
Definition SoftBodySharedSettings.h:160
A face defines the surface of the body.
Definition SoftBodySharedSettings.h:136
bool IsDegenerate() const
Check if this is a degenerate face (a face which points to the same vertex twice)
Definition SoftBodySharedSettings.h:144
Definition SoftBodySharedSettings.h:40
VertexAttributes()=default
Constructor.
VertexAttributes(float inCompliance, float inShearCompliance, float inBendCompliance, ELRAType inLRAType=ELRAType::None, float inLRAMaxDistanceMultiplier=1.0f)
Definition SoftBodySharedSettings.h:43
A vertex is a particle, the data in this structure is only used during creation of the soft body and ...
Definition SoftBodySharedSettings.h:122
Volume constraint, keeps the volume of a tetrahedron constant.
Definition SoftBodySharedSettings.h:203
uint32 GetMinVertexIndex() const
Return the lowest vertex index of this constraint.
Definition SoftBodySharedSettings.h:211