#[non_exhaustive]pub enum DecalProjection {
Planar,
TriPlanar {
blend_sharpness: f32,
},
Cylindrical {
facing: CylindricalFacing,
},
}Expand description
How a decal texture is projected onto the receiver surface.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Planar
Standard projection: the decal texture is mapped using the XY axes of the decal’s local space. Works well on flat or gently curved surfaces aligned with the projection direction.
TriPlanar
Tri-planar projection: the texture is sampled three times (from the X, Y, and Z axes of
decal local space) and blended by the surface normal. Avoids UV stretching on corners and
non-planar surfaces. blend_sharpness controls how quickly the blend transitions at edges
between faces: higher values produce a sharper transition, lower values a wider blend zone.
Three texture samples per pixel; the bandwidth cost is documented in the field.
Fields
Cylindrical
Cylindrical projection: wraps the texture around a cylinder whose axis is the decal’s local Z axis. UV.x is the angle around the axis (0 at local +X, wrapping at 360 degrees back to the start); UV.y is position along the axis (0 at local -Z, 1 at local +Z). The decal volume is a cylinder of radius 0.5 and height 1.0 in local space.
Use this for labels on pipes, warning bands on columns, or any decal that wraps continuously around a curved surface.
Fields
facing: CylindricalFacingWhich side of the cylinder surface to project onto.
Trait Implementations§
Source§impl Clone for DecalProjection
impl Clone for DecalProjection
Source§fn clone(&self) -> DecalProjection
fn clone(&self) -> DecalProjection
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 DecalProjection
Source§impl Debug for DecalProjection
impl Debug for DecalProjection
Source§impl Default for DecalProjection
impl Default for DecalProjection
Source§fn default() -> DecalProjection
fn default() -> DecalProjection
Source§impl PartialEq for DecalProjection
impl PartialEq for DecalProjection
Source§fn eq(&self, other: &DecalProjection) -> bool
fn eq(&self, other: &DecalProjection) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for DecalProjection
Auto Trait Implementations§
impl Freeze for DecalProjection
impl RefUnwindSafe for DecalProjection
impl Send for DecalProjection
impl Sync for DecalProjection
impl Unpin for DecalProjection
impl UnsafeUnpin for DecalProjection
impl UnwindSafe for DecalProjection
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,
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> 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> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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.