Struct ContactData.Contact
Represents a single contact point between two rigid bodies.
public struct ContactData.Contact
- Inherited Members
Remarks
This structure is layout-sensitive and stored in unmanaged memory as part of a ContactData. It contains geometric information (normal, tangents, positions) and solver state (accumulated impulses, bias).
Do not cache or store references to this structure across simulation steps.
Fields
AllowedPenetration
Penetration depth below which no position correction is applied.
public const float AllowedPenetration = 0.01
Field Value
Bias
Velocity bias for restitution or speculative separation.
public float Bias
Field Value
BiasFactor
Fraction of penetration corrected per step (Baumgarte stabilization).
public const float BiasFactor = 0.2
Field Value
BreakThreshold
Maximum tangential drift before a contact breaks; normal separation is limited to one tenth of this value.
public const float BreakThreshold = 0.02
Field Value
Flag
Current contact state flags.
public ContactData.Contact.Flags Flag
Field Value
MaximumBias
Maximum position-correction bias applied per iteration.
public const float MaximumBias = 100
Field Value
PenaltyBias
Position-correction bias computed from penetration depth.
public float PenaltyBias
Field Value
RelativePosition1
World-space contact offset from the first body's center of mass used to apply impulses. Held fixed during the substeps of a full simulation step.
[ReferenceFrame(ReferenceFrame.World)]
public JVector RelativePosition1
Field Value
RelativePosition2
World-space contact offset from the second body's center of mass used to apply impulses. Held fixed during the substeps of a full simulation step.
[ReferenceFrame(ReferenceFrame.World)]
public JVector RelativePosition2
Field Value
Properties
Impulse
Gets the accumulated normal solver impulse from the last solved substep.
public readonly float Impulse { get; }
Property Value
Normal
Normalized contact direction. A positive normal impulse pushes Body2 along this direction and Body1 against it. For overlapping contact points, the normal points from the point on body 2 toward the point on body 1. Updated when collision detection refreshes the contact.
[ReferenceFrame(ReferenceFrame.World)]
public readonly JVector Normal { get; }
Property Value
Tangent1
Tangent (normalized) to the contact Normal. At creation it follows tangential relative velocity when nonzero; otherwise it is an arbitrary tangent. Cached contacts adjust their tangent directions when the normal changes.
[ReferenceFrame(ReferenceFrame.World)]
public readonly JVector Tangent1 { get; }
Property Value
Tangent2
[ReferenceFrame(ReferenceFrame.World)]
public readonly JVector Tangent2 { get; }
Property Value
TangentImpulse1
Gets the accumulated solver impulse in the first tangent direction from the last solved substep.
public readonly float TangentImpulse1 { get; }
Property Value
TangentImpulse2
Gets the accumulated solver impulse in the second tangent direction from the last solved substep.
public readonly float TangentImpulse2 { get; }
Property Value
Methods
Initialize(ContactData*, in JVector, in JVector, in JVector, bool)
public void Initialize(ContactData* cd, in JVector point1, in JVector point2, in JVector n, bool newContact)
Parameters
cdContactData*point1JVectorpoint2JVectornJVectornewContactbool
Iterate(ContactData*, bool)
public void Iterate(ContactData* cd, bool applyBias)
Parameters
cdContactData*applyBiasbool
IterateAccelerated(ContactData*, bool)
public void IterateAccelerated(ContactData* cd, bool applyBias)
Parameters
cdContactData*applyBiasbool
PrepareForIteration(ContactData*, in TimeStep)
public void PrepareForIteration(ContactData* cd, in TimeStep timeStep)
Parameters
cdContactData*timeStepTimeStep
PrepareForIterationAccelerated(ContactData*, in TimeStep)
public void PrepareForIterationAccelerated(ContactData* cd, in TimeStep timeStep)
Parameters
cdContactData*timeStepTimeStep
UpdatePosition(ContactData*)
public bool UpdatePosition(ContactData* cd)
Parameters
cdContactData*