pub struct IntegrationParameters<N: RealField + Copy> {Show 16 fields
pub return_after_ccd_substep: bool,
pub t: N,
pub erp: N,
pub warmstart_coeff: N,
pub restitution_velocity_threshold: N,
pub allowed_linear_error: N,
pub allowed_angular_error: N,
pub max_linear_correction: N,
pub max_angular_correction: N,
pub max_stabilization_multiplier: N,
pub max_velocity_iterations: usize,
pub max_position_iterations: usize,
pub max_ccd_position_iterations: usize,
pub max_ccd_substeps: usize,
pub multiple_ccd_substep_sensor_events_enabled: bool,
pub ccd_on_penetration_enabled: bool,
/* private fields */
}Expand description
Parameters for a time-step of the physics engine.
Fields§
§return_after_ccd_substep: boolIf true, the world’s step method will stop right after resolving exactly one CCD event (default: false).
This allows the user to take action during a timestep, in-between two CCD events.
t: NThe total elapsed time in the physics world.
This is the accumulation of the dt of all the calls to world.step().
erp: NThe Error Reduction Parameter in [0, 1] is the proportion of
the positional error to be corrected at each time step (default: 0.2).
warmstart_coeff: NEach cached impulse are multiplied by this coefficient in [0, 1]
when they are re-used to initialize the solver (default 1.0).
restitution_velocity_threshold: NContacts at points where the involved bodies have a relative
velocity smaller than this threshold wont be affected by the restitution force (default: 1.0).
allowed_linear_error: NAmmount of penetration the engine wont attempt to correct (default: 0.001m).
allowed_angular_error: NAmmount of angular drift of joint limits the engine wont
attempt to correct (default: 0.001rad).
max_linear_correction: NMaximum linear correction during one step of the non-linear position solver (default: 0.2).
max_angular_correction: NMaximum angular correction during one step of the non-linear position solver (default: 0.2).
max_stabilization_multiplier: NMaximum nonlinear SOR-prox scaling parameter when the constraint
correction direction is close to the kernel of the involved multibody’s
jacobian (default: 0.2).
max_velocity_iterations: usizeMaximum number of iterations performed by the velocity constraints solver (default: 8).
max_position_iterations: usizeMaximum number of iterations performed by the position-based constraints solver (default: 3).
max_ccd_position_iterations: usizeMaximum number of iterations performed by the position-based constraints solver for CCD steps (default: 10).
This should be sufficiently high so all penetration get resolved. For example, if CCD cause your objects to stutter, that may be because the number of CCD position iterations is too low, causing them to remain stuck in a penetration configuration for a few frames.
The highest this number, the highest its computational cost.
max_ccd_substeps: usizeMaximum number of substeps performed by the solver (default: 1).
multiple_ccd_substep_sensor_events_enabled: boolControls the number of Proximity::Intersecting events generated by a trigger during CCD resolution (default: false).
If false, triggers will only generate one Proximity::Intersecting event during a step, even if another colliders repeatedly enters and leaves the triggers during multiple CCD substeps.
If true, triggers will generate as many Proximity::Intersecting and Proximity::Disjoint/Proximity::WithinMargin events as the number of times a collider repeatedly enters and leaves the triggers during multiple CCD substeps. This is more computationally intensive.
ccd_on_penetration_enabled: boolWhether penetration are taken into account in CCD resolution (default: false).
If this is set to false two penetrating colliders will not be considered to have any time of impact
while they are penetrating. This may end up allowing some tunelling, but will avoid stuttering effect
when the constraints solver fails to completely separate two colliders after a CCD contact.
If this is set to true, two penetrating colliders will be considered to have a time of impact
equal to 0 until the constraints solver manages to separate them. This will prevent tunnelling
almost completely, but may introduce stuttering effects when the constraints solver fails to completely
seperate two colliders after a CCD contact.
Implementations§
Source§impl<N: RealField + Copy> IntegrationParameters<N>
impl<N: RealField + Copy> IntegrationParameters<N>
Sourcepub fn new(
dt: N,
erp: N,
warmstart_coeff: N,
restitution_velocity_threshold: N,
allowed_linear_error: N,
allowed_angular_error: N,
max_linear_correction: N,
max_angular_correction: N,
max_stabilization_multiplier: N,
max_velocity_iterations: usize,
max_position_iterations: usize,
max_ccd_position_iterations: usize,
max_ccd_substeps: usize,
return_after_ccd_substep: bool,
multiple_ccd_substep_sensor_events_enabled: bool,
ccd_on_penetration_enabled: bool,
) -> Self
pub fn new( dt: N, erp: N, warmstart_coeff: N, restitution_velocity_threshold: N, allowed_linear_error: N, allowed_angular_error: N, max_linear_correction: N, max_angular_correction: N, max_stabilization_multiplier: N, max_velocity_iterations: usize, max_position_iterations: usize, max_ccd_position_iterations: usize, max_ccd_substeps: usize, return_after_ccd_substep: bool, multiple_ccd_substep_sensor_events_enabled: bool, ccd_on_penetration_enabled: bool, ) -> Self
Creates a set of integration parameters with the given values.
Sourcepub fn inv_dt(&self) -> N
pub fn inv_dt(&self) -> N
The inverse of the time-stepping length.
This is zero if self.dt is zero.
Sourcepub fn set_dt(&mut self, dt: N)
pub fn set_dt(&mut self, dt: N)
Sets the time-stepping length.
This automatically recompute self.inv_dt.
Sourcepub fn set_inv_dt(&mut self, inv_dt: N)
pub fn set_inv_dt(&mut self, inv_dt: N)
Sets the inverse time-stepping length (i.e. the frequency).
This automatically recompute self.dt.
Trait Implementations§
Auto Trait Implementations§
impl<N> Freeze for IntegrationParameters<N>where
N: Freeze,
impl<N> RefUnwindSafe for IntegrationParameters<N>where
N: RefUnwindSafe,
impl<N> Send for IntegrationParameters<N>
impl<N> Sync for IntegrationParameters<N>
impl<N> Unpin for IntegrationParameters<N>where
N: Unpin,
impl<N> UnwindSafe for IntegrationParameters<N>where
N: UnwindSafe,
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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
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<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.