Table of Contents

Class RigidBodyShape

Namespace
Jitter2.Collision.Shapes
Assembly
Jitter2.dll

Represents the abstract base class for shapes that can be attached to a rigid body.

public abstract class RigidBodyShape : Shape, IDynamicTreeProxy, IPartitionedSetIndex, IUpdatableBoundingBox, ISupportFeature, ISupportMappable, IRayCastable, IAngularSweepTestable, ISweepTestable, IDistanceTestable, IDebugDrawable
Inheritance
RigidBodyShape
Implements
Derived
Inherited Members

Properties

RigidBody

The RigidBody to which this shape is attached. It is null until the shape is attached and after it is removed from a body.

public RigidBody RigidBody { get; }

Property Value

RigidBody

Velocity

Gets the velocity of the entity, used for bounding box expansion.

public override sealed JVector Velocity { get; }

Property Value

JVector

Methods

CalculateBoundingBox(in JQuaternion, in JVector, out JBoundingBox)

public virtual void CalculateBoundingBox(in JQuaternion orientation, in JVector position, out JBoundingBox box)

Parameters

orientation JQuaternion
position JVector
box JBoundingBox

CalculateMassInertia(out JSymmetricMatrix, out JVector, out float)

Calculates the shape's mass, center of mass, and inertia at unit density. The default implementation approximates the surface; overrides can provide exact mass properties.

[ReferenceFrame(ReferenceFrame.Local)]
public virtual void CalculateMassInertia(out JSymmetricMatrix inertia, out JVector com, out float mass)

Parameters

inertia JSymmetricMatrix
com JVector
mass float

Remarks

The inertia tensor is computed relative to the coordinate system origin (0,0,0), not the center of mass.

DebugDraw(IDebugDrawer, in DebugDrawSettings)

Draws this shape using its attached body's transform, or the identity transform when unattached.

public override void DebugDraw(IDebugDrawer drawer, in DebugDrawSettings settings)

Parameters

drawer IDebugDrawer
settings DebugDrawSettings

Remarks

Point clouds and custom shapes may use an approximate surface with gaps or overlapping faces. Higher detail settings increase the drawing cost and do not guarantee a more accurate surface.

Distance<T>(in T, in JQuaternion, in JVector, out JVector, out JVector, out JVector, out float)

Finds the closest points between this object and the query shape.

[ReferenceFrame(ReferenceFrame.World)]
public override sealed bool Distance<T>(in T support, in JQuaternion orientation, in JVector position, out JVector pointA, out JVector pointB, out JVector normal, out float distance) where T : ISupportMappable

Parameters

support T

The query shape.

orientation JQuaternion

The query shape orientation in world space.

position JVector

The query shape position in world space.

pointA JVector

Closest point on the query shape in world space. Undefined when the shapes overlap.

pointB JVector

Closest point on this object in world space. Undefined when the shapes overlap.

normal JVector

Unit direction from the query shape toward this object, or Zero when the shapes overlap. Do not use this to test whether a result was found.

distance float

The separation distance between the shapes. Zero when overlapping.

Returns

bool

true if the shapes are separated; false if they overlap.

Type Parameters

T

The query support-map type.

LocalRayCast(in JVector, in JVector, out JVector, out float)

Casts a ray against the shape in local coordinates, without applying the body's transform.

[ReferenceFrame(ReferenceFrame.Local)]
public virtual bool LocalRayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)

Parameters

origin JVector

The starting point of the ray.

direction JVector

The direction of the ray. This vector does not need to be normalized.

normal JVector

The surface normal at the point of intersection, if an intersection occurs.

lambda float

The ray parameter from the origin to the intersection point. Because direction need not be normalized, this is not necessarily a distance. The hit point is: origin + lambda * direction.

Returns

bool

true if the ray intersects with the object; otherwise, false.

RayCast(in JVector, in JVector, out JVector, out float)

Performs a ray cast against this object.

[ReferenceFrame(ReferenceFrame.World)]
public override sealed bool RayCast(in JVector origin, in JVector direction, out JVector normal, out float lambda)

Parameters

origin JVector

The starting point of the ray.

direction JVector

The direction of the ray. Does not need to be normalized.

normal JVector

The surface normal at the intersection point, or Zero if the ray origin is inside the object. Use the return value, not this parameter, to test whether a hit occurred.

lambda float

The ray parameter of the intersection: hitPoint = origin + lambda * direction. It is a distance only if direction is normalized. Zero when the ray origin is inside the object.

Returns

bool

true if the ray intersects with the object; otherwise, false. Also returns true when the ray origin is inside the object, with lambda set to zero and normal set to Zero.

Sweep<T>(in T, in JQuaternion, in JVector, in JVector, out JVector, out JVector, out JVector, out float)

Performs a sweep test against this object.

[ReferenceFrame(ReferenceFrame.World)]
public override sealed bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector sweep, out JVector pointA, out JVector pointB, out JVector normal, out float lambda) where T : ISupportMappable

Parameters

support T

The query shape.

orientation JQuaternion

The query shape orientation in world space.

position JVector

The query shape position in world space.

sweep JVector

The query shape translation in world space.

pointA JVector

Collision point on the query shape in world space at the sweep origin. Undefined when the shapes already overlap.

pointB JVector

Collision point on this object in world space at the sweep origin. Undefined when the shapes already overlap.

normal JVector

Collision normal in world space, or Zero if the shapes already overlap. Use the return value to determine whether a hit occurred; do not rely on this being non-zero.

lambda float

The time of impact expressed in units of sweep. Zero if the shapes already overlap.

Returns

bool

true if the query shape hits or already overlaps this object; otherwise, false.

Type Parameters

T

The query support-map type.

Sweep<T>(in T, in JQuaternion, in JVector, in JVector, in JVector, float, float, out JVector, out JVector, out JVector, out float)

Finds the first impact within the specified time interval.

[ReferenceFrame(ReferenceFrame.World)]
public override sealed bool Sweep<T>(in T support, in JQuaternion orientation, in JVector position, in JVector velocity, in JVector angularVelocity, float extent, float maximumTime, out JVector pointA, out JVector pointB, out JVector normal, out float lambda) where T : ISupportMappable

Parameters

support T

The query shape.

orientation JQuaternion

The query shape's initial world-space orientation.

position JVector

The query shape's initial world-space position and rotation origin.

velocity JVector

The query shape's linear velocity in world space.

angularVelocity JVector

The query shape's angular velocity in world space, in radians per second.

extent float

A radius enclosing the query shape about its rotation origin, including any local offset.

maximumTime float

The last time to search, in seconds.

pointA JVector

Contact point on the query shape at its initial pose.

pointB JVector

Contact point on this object in world space.

normal JVector

World-space normal from the query shape toward this object at impact; zero for initial overlap.

lambda float

Time of impact in seconds; zero for initial overlap.

Returns

bool

True if an impact is found; false if the shapes miss or the search fails.

Type Parameters

T

The query support-map type.

UpdateWorldBoundingBox(float)

Recomputes the world-space bounding box.

public override sealed void UpdateWorldBoundingBox(float dt = 0)

Parameters

dt float

The timestep for velocity-based expansion. Default is zero.