pub struct TrimeshBuilder {
pub shape: SharedShape,
pub position: Position,
pub rotation: Rotation,
pub fail_on_compound_error: bool,
pub fallback_subdivisions: NonZeroU32,
pub sphere_subdivisions: Option<(NonZeroU32, NonZeroU32)>,
pub capsule_subdivision: Option<(NonZeroU32, NonZeroU32)>,
pub cylinder_subdivisions: Option<NonZeroU32>,
pub cone_subdivisions: Option<NonZeroU32>,
}Expand description
An ergonomic builder for triangle meshes from Colliders.
The builder can configure different subdivision levels for different shapes.
If a shape was not explicitly configured, the builder will use Self::fallback_subdivisions.
Shapes with rounded corners such as Collider::round_cuboid will be subdivided as if they were not rounded.
§Example
let collider = Collider::sphere(1.0);
// Using default settings
let trimesh = collider.trimesh_builder().build().unwrap();
// Using extra subdivisions
let trimesh = collider
.trimesh_builder()
.sphere_subdivisions(20, 20)
.build()
.unwrap();
// Setting different subdivisions for different shapes
let trimesh = collider
.trimesh_builder()
.sphere_subdivisions(20, 20)
.capsule_subdivisions(10, 5)
.fallback_subdivisions(15)
.build()
.unwrap();
// Generating the trimesh with a transformation
let trimesh = collider
.trimesh_builder()
.translated(Vector::new(1.0, 0.0, 0.0))
.build()
.unwrap();Fields§
§shape: SharedShapeThe shape to be converted into a triangle mesh.
position: PositionThe position of the shape. The default is [0, 0, 0].
rotation: RotationThe rotation of the shape. The default is the identity rotation.
fail_on_compound_error: boolWhether a failure to trimesh a subshape in a compound shape should fail the entire build process. Default is true.
fallback_subdivisions: NonZeroU32The number of subdivisions to use for shapes that do not have a specific subdivision count. Default is 16.
sphere_subdivisions: Option<(NonZeroU32, NonZeroU32)>The number of subdivisions for shapes that derive from a sphere. Default is None.
capsule_subdivision: Option<(NonZeroU32, NonZeroU32)>The number of subdivisions for shapes that derive from a capsule. Default is None.
cylinder_subdivisions: Option<NonZeroU32>The number of subdivisions for shapes that derive from a cylinder. Default is None.
cone_subdivisions: Option<NonZeroU32>The number of subdivisions for shapes that derive from a cone. Default is None.
Implementations§
Source§impl TrimeshBuilder
impl TrimeshBuilder
Sourcepub fn new(shape: SharedShape) -> Self
pub fn new(shape: SharedShape) -> Self
Creates a new TrimeshBuilder for the given shape. Usually you’ll want to call Collider::trimesh_builder instead.
Sourcepub fn translated(&mut self, position: impl Into<Position>) -> &mut Self
pub fn translated(&mut self, position: impl Into<Position>) -> &mut Self
Translates the mesh. Subsequent calls to this method will add to the previous translation.
Sourcepub fn rotated(&mut self, rotation: impl Into<Rotation>) -> &mut Self
pub fn rotated(&mut self, rotation: impl Into<Rotation>) -> &mut Self
Rotates the mesh. Subsequent calls to this method will add to the previous rotation.
Sourcepub fn fallback_subdivisions(
&mut self,
subdivisions: impl TryInto<NonZeroU32>,
) -> &mut Self
pub fn fallback_subdivisions( &mut self, subdivisions: impl TryInto<NonZeroU32>, ) -> &mut Self
Sets the fallback subdivision count for shapes that don’t have a specific subdivision count. Default is 16.
Sourcepub fn sphere_subdivisions(
&mut self,
theta: impl TryInto<NonZeroU32>,
phi: impl TryInto<NonZeroU32>,
) -> &mut Self
pub fn sphere_subdivisions( &mut self, theta: impl TryInto<NonZeroU32>, phi: impl TryInto<NonZeroU32>, ) -> &mut Self
Sets the subdivision count for sphere shapes. theta is the number of subdivisions along the
latitude, and phi is the number of subdivisions along the longitude.
Sourcepub fn capsule_subdivisions(
&mut self,
theta: impl TryInto<NonZeroU32>,
phi: impl TryInto<NonZeroU32>,
) -> &mut Self
pub fn capsule_subdivisions( &mut self, theta: impl TryInto<NonZeroU32>, phi: impl TryInto<NonZeroU32>, ) -> &mut Self
Sets the subdivision count for capsule shapes. theta is the number of subdivisions along the
latitude, and phi is the number of subdivisions along the longitude.
Sourcepub fn cylinder_subdivisions(
&mut self,
subdivisions: impl TryInto<NonZeroU32>,
) -> &mut Self
pub fn cylinder_subdivisions( &mut self, subdivisions: impl TryInto<NonZeroU32>, ) -> &mut Self
Sets the subdivision count for cylinder shapes.
Sourcepub fn cone_subdivisions(
&mut self,
subdivisions: impl TryInto<NonZeroU32>,
) -> &mut Self
pub fn cone_subdivisions( &mut self, subdivisions: impl TryInto<NonZeroU32>, ) -> &mut Self
Sets the subdivision count for cone shapes.
Sourcepub fn fail_on_compound_error(
&mut self,
fail_on_compound_error: bool,
) -> &mut Self
pub fn fail_on_compound_error( &mut self, fail_on_compound_error: bool, ) -> &mut Self
Whether a failure to trimesh a subshape in a compound shape should fail the entire build process. Default is true.
Sourcepub fn build(&self) -> Result<Trimesh, TrimeshBuilderError>
pub fn build(&self) -> Result<Trimesh, TrimeshBuilderError>
Builds the trimesh from the configured settings.
Returns an error if the shape is not supported.
If the shape is a compound, errors in a subshape will either be ignored or fail the entire build process
depending on the value of Self::fail_on_compound_error.
Trait Implementations§
Source§impl Clone for TrimeshBuilder
impl Clone for TrimeshBuilder
Source§fn clone(&self) -> TrimeshBuilder
fn clone(&self) -> TrimeshBuilder
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TrimeshBuilder
impl !RefUnwindSafe for TrimeshBuilder
impl Send for TrimeshBuilder
impl Sync for TrimeshBuilder
impl Unpin for TrimeshBuilder
impl !UnwindSafe for TrimeshBuilder
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.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>, which can then be
downcast into Box<dyn 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>, which 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
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.