#[non_exhaustive]pub struct VolumeItem {Show 13 fields
pub volume_id: VolumeId,
pub color_lut: Option<ColormapId>,
pub opacity_lut: Option<ColormapId>,
pub scalar_range: (f32, f32),
pub bbox_min: [f32; 3],
pub bbox_max: [f32; 3],
pub step_scale: f32,
pub model: [[f32; 4]; 4],
pub enable_shading: bool,
pub opacity_scale: f32,
pub threshold_min: f32,
pub threshold_max: f32,
pub nan_color: Option<[f32; 4]>,
}Expand description
A volume item to render via GPU ray-marching.
The caller uploads a 3D scalar field via ViewportGpuResources::upload_volume and
receives a VolumeId. Each frame, submit a VolumeItem referencing that id plus
transfer function and display parameters.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.volume_id: VolumeIdReference to a previously uploaded 3D texture.
color_lut: Option<ColormapId>Color transfer function LUT. None = use default builtin (viridis).
opacity_lut: Option<ColormapId>Opacity transfer function LUT. None = linear ramp (0 at min, 1 at max).
scalar_range: (f32, f32)Scalar range for normalization [min, max].
bbox_min: [f32; 3]World-space bounding box minimum corner.
bbox_max: [f32; 3]World-space bounding box maximum corner.
step_scale: f32Ray step multiplier. Lower = higher quality, slower. Default: 1.0.
model: [[f32; 4]; 4]World-space transform. Default: identity.
enable_shading: boolWhether to apply gradient-based Phong shading. Default: false.
opacity_scale: f32Global opacity multiplier. Default: 1.0.
threshold_min: f32Scalar threshold range [min, max]. Samples outside this range are discarded (opacity = 0). Default: same as scalar_range (no clipping).
threshold_max: f32Upper scalar threshold. Samples above this value are discarded. Default: same as scalar_range.1 (no clipping).
nan_color: Option<[f32; 4]>Color and opacity to use for NaN scalar samples. None = skip NaN samples entirely
(same as current behaviour: discard). Some([r, g, b, a]) = render NaN voxels with
this fixed RGBA color instead of sampling the transfer function.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for VolumeItem
impl RefUnwindSafe for VolumeItem
impl Send for VolumeItem
impl Sync for VolumeItem
impl Unpin for VolumeItem
impl UnsafeUnpin for VolumeItem
impl UnwindSafe for VolumeItem
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> 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<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.