pub struct ContactPoint {
pub point: Vec3,
pub normal: Vec3,
pub penetration: f32,
pub local_point_a: Vec3,
pub local_point_b: Vec3,
pub normal_impulse: f32,
pub tangent_impulse: Vec3,
}Expand description
A single contact point between two colliding bodies.
normal always points from body A toward body B (the separating
direction for body A). Both local_point_* fields are populated by the
dispatcher for warm-starting the constraint solver across frames.
Fields§
§point: Vec3World-space contact position (midpoint on the contact surface).
normal: Vec3Contact normal, pointing from A to B (unit vector).
penetration: f32Penetration depth. Positive for a real overlap (discrete contact); a
negative value marks a speculative CCD contact and encodes the
separation gap the solver may close this step (see Gjk::speculative_contact).
local_point_a: Vec3point expressed in body A’s local space (set by the dispatcher).
local_point_b: Vec3point expressed in body B’s local space (set by the dispatcher).
normal_impulse: f32Accumulated normal impulse — reused for warm-starting.
tangent_impulse: Vec3Accumulated tangential impulse — reused for warm-starting.
Trait Implementations§
Source§impl Clone for ContactPoint
impl Clone for ContactPoint
Source§fn clone(&self) -> ContactPoint
fn clone(&self) -> ContactPoint
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ContactPoint
Source§impl Debug for ContactPoint
impl Debug for ContactPoint
Source§impl Default for ContactPoint
impl Default for ContactPoint
Source§fn default() -> ContactPoint
fn default() -> ContactPoint
Source§impl<'de> Deserialize<'de> for ContactPoint
impl<'de> Deserialize<'de> for ContactPoint
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ContactPoint, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ContactPoint, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl FromIterator<ContactPoint> for ContactPoints
impl FromIterator<ContactPoint> for ContactPoints
Source§fn from_iter<I>(iter: I) -> ContactPointswhere
I: IntoIterator<Item = ContactPoint>,
fn from_iter<I>(iter: I) -> ContactPointswhere
I: IntoIterator<Item = ContactPoint>,
Source§impl PartialEq for ContactPoint
impl PartialEq for ContactPoint
Source§impl Serialize for ContactPoint
impl Serialize for ContactPoint
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for ContactPoint
Auto Trait Implementations§
impl Freeze for ContactPoint
impl RefUnwindSafe for ContactPoint
impl Send for ContactPoint
impl Sync for ContactPoint
impl Unpin for ContactPoint
impl UnsafeUnpin for ContactPoint
impl UnwindSafe for ContactPoint
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().