# [−][src]Struct nphysics3d::solver::IntegrationParameters

Parameters for a time-step of the physics engine.

## Fields

`return_after_ccd_substep: bool`

If `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: N`

The total elapsed time in the physics world.

This is the accumulation of the `dt`

of all the calls to `world.step()`

.

`erp: N`

The 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: N`

Each 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: N`

Contacts 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: N`

Ammount of penetration the engine wont attempt to correct (default: `0.001m`

).

`allowed_angular_error: N`

Ammount of angular drift of joint limits the engine wont
attempt to correct (default: `0.001rad`

).

`max_linear_correction: N`

Maximum linear correction during one step of the non-linear position solver (default: `0.2`

).

`max_angular_correction: N`

Maximum angular correction during one step of the non-linear position solver (default: `0.2`

).

`max_stabilization_multiplier: N`

Maximum 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: usize`

Maximum number of iterations performed by the velocity constraints solver (default: `8`

).

`max_position_iterations: usize`

Maximum number of iterations performed by the position-based constraints solver (default: `3`

).

`max_ccd_position_iterations: usize`

Maximum 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: usize`

Maximum number of substeps performed by the solver (default: `1`

).

`multiple_ccd_substep_sensor_events_enabled: bool`

Controls 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: bool`

Whether 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.

## Methods

`impl<N: RealField> IntegrationParameters<N>`

[src]

`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

[src]

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.

`pub fn dt(&self) -> N`

[src]

The current time-stepping length.

`pub fn inv_dt(&self) -> N`

[src]

The inverse of the time-stepping length.

This is zero if `self.dt`

is zero.

`pub fn set_dt(&mut self, dt: N)`

[src]

Sets the time-stepping length.

This automatically recompute `self.inv_dt`

.

`pub fn set_inv_dt(&mut self, inv_dt: N)`

[src]

Sets the inverse time-stepping length (i.e. the frequency).

This automatically recompute `self.dt`

.

## Trait Implementations

`impl<N: Clone + RealField> Clone for IntegrationParameters<N>`

[src]

`fn clone(&self) -> IntegrationParameters<N>`

[src]

`fn clone_from(&mut self, source: &Self)`

1.0.0[src]

`impl<N: RealField> Default for IntegrationParameters<N>`

[src]

## Auto Trait Implementations

`impl<N> RefUnwindSafe for IntegrationParameters<N> where`

N: RefUnwindSafe,

N: RefUnwindSafe,

`impl<N> Send for IntegrationParameters<N>`

`impl<N> Sync for IntegrationParameters<N>`

`impl<N> Unpin for IntegrationParameters<N> where`

N: Unpin,

N: Unpin,

`impl<N> UnwindSafe for IntegrationParameters<N> where`

N: UnwindSafe,

N: UnwindSafe,

## Blanket Implementations

`impl<T> Any for T where`

T: 'static + ?Sized,

[src]

T: 'static + ?Sized,

`impl<T> Borrow<T> for T where`

T: ?Sized,

[src]

T: ?Sized,

`impl<T> BorrowMut<T> for T where`

T: ?Sized,

[src]

T: ?Sized,

`fn borrow_mut(&mut self) -> &mut T`

[src]

`impl<T> Downcast for T where`

T: Any,

T: Any,

`fn into_any(self: Box<T>) -> Box<dyn Any + 'static>`

`fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>`

`fn as_any(&self) -> &(dyn Any + 'static)`

`fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)`

`impl<T> DowncastSync for T where`

T: Send + Sync + Any,

T: Send + Sync + Any,

`impl<T> From<T> for T`

[src]

`impl<T, U> Into<U> for T where`

U: From<T>,

[src]

U: From<T>,

`impl<T> Same<T> for T`

`type Output = T`

Should always be `Self`

`impl<SS, SP> SupersetOf<SS> for SP where`

SS: SubsetOf<SP>,

SS: SubsetOf<SP>,

`fn to_subset(&self) -> Option<SS>`

`fn is_in_subset(&self) -> bool`

`unsafe fn to_subset_unchecked(&self) -> SS`

`fn from_subset(element: &SS) -> SP`

`impl<T> ToOwned for T where`

T: Clone,

[src]

T: Clone,

`type Owned = T`

The resulting type after obtaining ownership.

`fn to_owned(&self) -> T`

[src]

`fn clone_into(&self, target: &mut T)`

[src]

`impl<T, U> TryFrom<U> for T where`

U: Into<T>,

[src]

U: Into<T>,

`type Error = Infallible`

The type returned in the event of a conversion error.

`fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`

[src]

`impl<T, U> TryInto<U> for T where`

U: TryFrom<T>,

[src]

U: TryFrom<T>,

`type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

`fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`

[src]

`impl<V, T> VZip<V> for T where`

V: MultiLane<T>,

V: MultiLane<T>,