Table of Contents

Struct Capsule

Namespace
BepuPhysics.Collidables
Assembly
BepuPhysics.dll

Collision shape representing a sphere-expanded line segment.

public struct Capsule : IConvexShape, IShape
Implements
Inherited Members

Constructors

Capsule(float, float)

Creates a capsule shape.

public Capsule(float radius, float length)

Parameters

radius float

Radius of the capsule.

length float

Length of the capsule's internal line segment along the local Y axis.

Fields

HalfLength

Half of the length of the internal line segment. Oriented along the local Y axis.

public float HalfLength

Field Value

float

Id

Type id of capsule shapes.

public const int Id = 1

Field Value

int

Radius

Spherical expansion applied to the internal line segment.

public float Radius

Field Value

float

Properties

Length

Gets or sets the length of the capsule's internal line segment along the local Y axis.

public float Length { get; set; }

Property Value

float

TypeId

Unique type id for this shape type.

public static int TypeId { get; }

Property Value

int

Methods

ComputeAngularExpansionData(out float, out float)

Computes information about how the bounding box should be expanded in response to angular velocity.

public readonly void ComputeAngularExpansionData(out float maximumRadius, out float maximumAngularExpansion)

Parameters

maximumRadius float
maximumAngularExpansion float

Remarks

This is typically used in the engine for predicting bounding boxes at the beginning of the frame. Velocities are used to expand the bounding box so that likely future collisions will be detected. Linear velocity expands the bounding box in a direct and simple way, but angular expansion requires more information about the shape. Imagine a long and thin capsule versus a sphere: high angular velocity may require significant expansion on the capsule, but spheres are rotationally invariant.

ComputeBounds(Quaternion, out Vector3, out Vector3)

Computes the bounding box of a shape given an orientation.

public readonly void ComputeBounds(Quaternion orientation, out Vector3 min, out Vector3 max)

Parameters

orientation Quaternion

Orientation of the shape to use when computing the bounding box.

min Vector3

Minimum corner of the bounding box.

max Vector3

Maximum corner of the bounding box.

ComputeInertia(float)

Computes the inertia for a body given a mass.

public readonly BodyInertia ComputeInertia(float mass)

Parameters

mass float

Mass to use to compute the body's inertia.

Returns

BodyInertia

Inertia for the body.

Remarks

Note that the BodyInertia returned by this stores the inverse mass and inverse inertia tensor. This is because the most high frequency use of body inertia most naturally uses the inverse.

CreateShapeBatch(BufferPool, int, Shapes)

Creates a shape batch for this type of shape.

public static ShapeBatch CreateShapeBatch(BufferPool pool, int initialCapacity, Shapes shapeBatches)

Parameters

pool BufferPool

Buffer pool used to create the batch.

initialCapacity int

Initial capacity to allocate within the batch.

shapeBatches Shapes

The set of shapes to contain this batch.

Returns

ShapeBatch

Shape batch for the shape type.

Remarks

This is typically used internally to initialize new shape collections in response to shapes being added. It is not likely to be useful outside of the engine.

RayTest(in RigidPose, Vector3, Vector3, out float, out Vector3)

Tests a ray against the shape.

public readonly bool RayTest(in RigidPose pose, Vector3 origin, Vector3 direction, out float t, out Vector3 normal)

Parameters

pose RigidPose

Pose of the shape during the ray test.

origin Vector3

Origin of the ray to test against the shape relative to the shape.

direction Vector3

Direction of the ray to test against the shape.

t float

Distance along the ray direction to the hit point, if any, in units of the ray direction's length. In other words, hitLocation = origin + direction * t.

normal Vector3

Normal of the impact surface, if any.

Returns

bool

True if the ray intersected the shape, false otherwise.