pub struct RigidBody {Show 14 fields
pub position: Vector3<f32>,
pub velocity: Vector3<f32>,
pub mass: f32,
pub inv_mass: f32,
pub body_type: BodyType,
pub restitution: f32,
pub collider: Option<Collider>,
pub friction: f32,
pub damping: f32,
pub orientation: UnitQuaternion<f32>,
pub angular_velocity: Vector3<f32>,
pub inv_inertia_local: Matrix3<f32>,
pub angular_damping: f32,
pub active: bool,
/* private fields */
}Expand description
A rigid body with linear and angular dynamics.
Tracks position, velocity, orientation, angular velocity, accumulated forces/torques, and mass/inertia.
Fields§
§position: Vector3<f32>§velocity: Vector3<f32>§mass: f32§inv_mass: f32§body_type: BodyType§restitution: f32§collider: Option<Collider>§friction: f32Coulomb friction coefficient (0.0 = frictionless ice, 1.0 = very rough).
During collision response the effective friction is the geometric mean
of both bodies’ coefficients: sqrt(mu_a * mu_b).
damping: f32Linear damping factor (0.0 = no damping, 1.0 = full stop).
Applied each step as velocity *= (1.0 - damping).
orientation: UnitQuaternion<f32>Orientation quaternion. Defaults to identity (no rotation).
angular_velocity: Vector3<f32>Angular velocity in world-space (radians per second).
inv_inertia_local: Matrix3<f32>Inverse of the inertia tensor in body-local space. For static bodies this is the zero matrix.
angular_damping: f32Angular damping factor (0.0 = no damping, 1.0 = full stop).
Applied each step as angular_velocity *= (1.0 - angular_damping).
active: boolWhether this body is active. Inactive bodies are skipped during
integration and collision detection. Set to false by PhysicsWorld::remove_body.
Implementations§
Source§impl RigidBody
impl RigidBody
Sourcepub fn new(mass: f32) -> Self
pub fn new(mass: f32) -> Self
Create a new dynamic rigid body with the given mass (in kg).
The body starts with a default point-mass inertia tensor (identity scaled
by mass). Use [with_inertia_sphere] or [with_inertia_box] after
attaching a collider for physically accurate rotation.
§Panics
Panics if mass is not positive and finite.
Sourcepub fn new_static() -> Self
pub fn new_static() -> Self
Create a new static rigid body (infinite mass, unaffected by forces).
Sourcepub fn with_position(self, position: Vector3<f32>) -> Self
pub fn with_position(self, position: Vector3<f32>) -> Self
Builder: set initial position.
Sourcepub fn with_velocity(self, velocity: Vector3<f32>) -> Self
pub fn with_velocity(self, velocity: Vector3<f32>) -> Self
Builder: set initial velocity.
Sourcepub fn with_restitution(self, restitution: f32) -> Self
pub fn with_restitution(self, restitution: f32) -> Self
Builder: set restitution (bounciness, 0.0..=1.0).
Sourcepub fn with_damping(self, damping: f32) -> Self
pub fn with_damping(self, damping: f32) -> Self
Builder: set linear damping (0.0..=1.0).
Sourcepub fn with_collider(self, collider: Collider) -> Self
pub fn with_collider(self, collider: Collider) -> Self
Builder: attach a collider for collision detection.
Sourcepub fn with_friction(self, friction: f32) -> Self
pub fn with_friction(self, friction: f32) -> Self
Builder: set friction coefficient (0.0..=1.0).
Sourcepub fn with_angular_velocity(self, angular_velocity: Vector3<f32>) -> Self
pub fn with_angular_velocity(self, angular_velocity: Vector3<f32>) -> Self
Builder: set initial angular velocity (in radians per second).
Sourcepub fn with_angular_damping(self, damping: f32) -> Self
pub fn with_angular_damping(self, damping: f32) -> Self
Builder: set angular damping (0.0..=1.0).
Sourcepub fn with_inertia_sphere(self, radius: f32) -> Self
pub fn with_inertia_sphere(self, radius: f32) -> Self
Builder: set the inertia tensor for a solid sphere of given radius.
Inertia: I = (2/5) * m * r² (uniform along all axes).
Sourcepub fn with_inertia_box(self, half_extents: Vector3<f32>) -> Self
pub fn with_inertia_box(self, half_extents: Vector3<f32>) -> Self
Builder: set the inertia tensor for a solid box with given half-extents.
For a box of full dimensions (2*hx, 2*hy, 2*hz):
Ixx = (1/12) * m * (4*hy² + 4*hz²)Iyy = (1/12) * m * (4*hx² + 4*hz²)Izz = (1/12) * m * (4*hx² + 4*hy²)
Sourcepub fn apply_force(&mut self, force: Vector3<f32>)
pub fn apply_force(&mut self, force: Vector3<f32>)
Apply a force (in Newtons) to this body. Forces accumulate until the next step().
Sourcepub fn apply_impulse(&mut self, impulse: Vector3<f32>)
pub fn apply_impulse(&mut self, impulse: Vector3<f32>)
Apply an instantaneous impulse (change in momentum) to this body.
Directly modifies velocity: delta_v = impulse / mass.
Sourcepub fn apply_torque(&mut self, torque: Vector3<f32>)
pub fn apply_torque(&mut self, torque: Vector3<f32>)
Apply a torque (in N·m) to this body. Torques accumulate until the next step().
Sourcepub fn apply_angular_impulse(&mut self, impulse: Vector3<f32>)
pub fn apply_angular_impulse(&mut self, impulse: Vector3<f32>)
Apply an instantaneous angular impulse (change in angular momentum).
Directly modifies angular velocity: delta_ω = I⁻¹ * impulse.
Sourcepub fn inv_inertia_world(&self) -> Matrix3<f32>
pub fn inv_inertia_world(&self) -> Matrix3<f32>
Compute the world-space inverse inertia tensor from the local one and
the current orientation: I⁻¹_world = R * I⁻¹_local * Rᵀ.
Sourcepub fn kinetic_energy(&self) -> f32
pub fn kinetic_energy(&self) -> f32
Returns the kinetic energy of this body: 0.5 * m * v^2.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for RigidBody
impl RefUnwindSafe for RigidBody
impl Send for RigidBody
impl Sync for RigidBody
impl Unpin for RigidBody
impl UnsafeUnpin for RigidBody
impl UnwindSafe for RigidBody
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.