Struct Vec3
#[repr(C)]pub struct Vec3 {
pub x: f32,
pub y: f32,
pub z: f32,
}Expand description
A 3-dimensional vector.
Fields§
§x: f32§y: f32§z: f32Implementations§
§impl Vec3
impl Vec3
pub const NEG_INFINITY: Vec3
pub const NEG_INFINITY: Vec3
All f32::NEG_INFINITY.
pub const USES_CORE_SIMD: bool = false
pub const USES_CORE_SIMD: bool = false
Vec3 uses Rust Portable SIMD
pub const USES_SCALAR_MATH: bool = true
pub const USES_SCALAR_MATH: bool = true
Vec3 uses scalar math
pub const USES_WASM_SIMD: bool = false
pub const USES_WASM_SIMD: bool = false
Vec3 uses WebAssembly 128-bit SIMD
pub const USES_WASM32_SIMD: bool = false
Renamed to USES_WASM_SIMD
pub fn map<F>(self, f: F) -> Vec3
pub fn map<F>(self, f: F) -> Vec3
Returns a vector containing each element of self modified by a mapping function f.
pub fn select(mask: BVec3, if_true: Vec3, if_false: Vec3) -> Vec3
pub fn select(mask: BVec3, if_true: Vec3, if_false: Vec3) -> Vec3
Creates a vector from the elements in if_true and if_false, selecting which to use
for each element of self.
A true element in the mask uses the corresponding element from if_true, and false
uses the element from if_false.
pub const fn from_array(a: [f32; 3]) -> Vec3
pub const fn from_array(a: [f32; 3]) -> Vec3
Creates a new vector from an array.
pub const fn from_slice(slice: &[f32]) -> Vec3
pub const fn from_slice(slice: &[f32]) -> Vec3
Creates a vector from the first 3 values in slice.
§Panics
Panics if slice is less than 3 elements long.
pub fn write_to_slice(self, slice: &mut [f32])
pub fn write_to_slice(self, slice: &mut [f32])
Writes the elements of self to the first 3 elements in slice.
§Panics
Panics if slice is less than 3 elements long.
pub fn truncate(self) -> Vec2
pub fn truncate(self) -> Vec2
Creates a 2D vector from the x and y elements of self, discarding z.
Truncation may also be performed by using [self.xy()][crate::swizzles::Vec3Swizzles::xy()].
pub fn from_homogeneous(v: Vec4) -> Vec3
pub fn from_homogeneous(v: Vec4) -> Vec3
Projects a homogeneous coordinate to 3D space by performing perspective divide.
§Panics
Will panic if v.w is 0 when glam_assert is enabled.
pub fn to_homogeneous(self) -> Vec4
pub fn to_homogeneous(self) -> Vec4
Creates a homogeneous coordinate from self, equivalent to self.extend(1.0).
pub fn to_vec3a(self) -> Vec3A
pub fn dot_into_vec(self, rhs: Vec3) -> Vec3
pub fn dot_into_vec(self, rhs: Vec3) -> Vec3
Returns a vector where every component is the dot product of self and rhs.
pub fn min(self, rhs: Vec3) -> Vec3
pub fn min(self, rhs: Vec3) -> Vec3
Returns a vector containing the minimum values for each element of self and rhs.
In other words this computes [min(x, rhs.x), min(self.y, rhs.y), ..].
NaN propogation does not follow IEEE 754-2008 semantics for minNum and may differ on different SIMD architectures.
pub fn max(self, rhs: Vec3) -> Vec3
pub fn max(self, rhs: Vec3) -> Vec3
Returns a vector containing the maximum values for each element of self and rhs.
In other words this computes [max(self.x, rhs.x), max(self.y, rhs.y), ..].
NaN propogation does not follow IEEE 754-2008 semantics for maxNum and may differ on different SIMD architectures.
pub fn clamp(self, min: Vec3, max: Vec3) -> Vec3
pub fn clamp(self, min: Vec3, max: Vec3) -> Vec3
Component-wise clamping of values, similar to f32::clamp.
Each element in min must be less-or-equal to the corresponding element in max.
NaN propogation does not follow IEEE 754-2008 semantics and may differ on different SIMD architectures.
§Panics
Will panic if min is greater than max when glam_assert is enabled.
pub fn min_element(self) -> f32
pub fn min_element(self) -> f32
Returns the horizontal minimum of self.
In other words this computes min(x, y, ..).
NaN propogation does not follow IEEE 754-2008 semantics and may differ on different SIMD architectures.
pub fn max_element(self) -> f32
pub fn max_element(self) -> f32
Returns the horizontal maximum of self.
In other words this computes max(x, y, ..).
NaN propogation does not follow IEEE 754-2008 semantics and may differ on different SIMD architectures.
pub fn min_position(self) -> usize
pub fn min_position(self) -> usize
Returns the index of the first minimum element of self.
pub fn max_position(self) -> usize
pub fn max_position(self) -> usize
Returns the index of the first maximum element of self.
pub fn element_sum(self) -> f32
pub fn element_sum(self) -> f32
Returns the sum of all elements of self.
In other words, this computes self.x + self.y + ...
pub fn element_product(self) -> f32
pub fn element_product(self) -> f32
Returns the product of all elements of self.
In other words, this computes self.x * self.y * ...
pub fn cmpeq(self, rhs: Vec3) -> BVec3
pub fn cmpeq(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a == comparison for each element of
self and rhs.
In other words, this computes [self.x == rhs.x, self.y == rhs.y, ..] for all
elements.
pub fn cmpne(self, rhs: Vec3) -> BVec3
pub fn cmpne(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a != comparison for each element of
self and rhs.
In other words this computes [self.x != rhs.x, self.y != rhs.y, ..] for all
elements.
pub fn cmpge(self, rhs: Vec3) -> BVec3
pub fn cmpge(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a >= comparison for each element of
self and rhs.
In other words this computes [self.x >= rhs.x, self.y >= rhs.y, ..] for all
elements.
pub fn cmpgt(self, rhs: Vec3) -> BVec3
pub fn cmpgt(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a > comparison for each element of
self and rhs.
In other words this computes [self.x > rhs.x, self.y > rhs.y, ..] for all
elements.
pub fn cmple(self, rhs: Vec3) -> BVec3
pub fn cmple(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a <= comparison for each element of
self and rhs.
In other words this computes [self.x <= rhs.x, self.y <= rhs.y, ..] for all
elements.
pub fn cmplt(self, rhs: Vec3) -> BVec3
pub fn cmplt(self, rhs: Vec3) -> BVec3
Returns a vector mask containing the result of a < comparison for each element of
self and rhs.
In other words this computes [self.x < rhs.x, self.y < rhs.y, ..] for all
elements.
pub fn signum(self) -> Vec3
pub fn signum(self) -> Vec3
Returns a vector with elements representing the sign of self.
1.0if the number is positive,+0.0orINFINITY-1.0if the number is negative,-0.0orNEG_INFINITYNANif the number isNAN
pub fn copysign(self, rhs: Vec3) -> Vec3
pub fn copysign(self, rhs: Vec3) -> Vec3
Returns a vector with signs of rhs and the magnitudes of self.
pub fn is_negative_bitmask(self) -> u32
pub fn is_negative_bitmask(self) -> u32
Returns a bitmask with the lowest 3 bits set to the sign bits from the elements of self.
A negative element results in a 1 bit and a positive element in a 0 bit. Element x goes
into the first lowest bit, element y into the second, etc.
An element is negative if it has a negative sign, including -0.0, NaNs with negative sign bit and negative infinity.
pub fn is_negative_mask(self) -> BVec3
pub fn is_negative_mask(self) -> BVec3
Returns a mask indicating which components are negative.
An element is negative if it has a negative sign, including -0.0, NaNs with negative sign bit and negative infinity.
pub fn is_finite(self) -> bool
pub fn is_finite(self) -> bool
Returns true if, and only if, all elements are finite. If any element is either
NaN, positive or negative infinity, this will return false.
pub fn is_finite_mask(self) -> BVec3
pub fn is_finite_mask(self) -> BVec3
Performs is_finite on each element of self, returning a vector mask of the results.
In other words, this computes [x.is_finite(), y.is_finite(), ...].
pub fn is_nan_mask(self) -> BVec3
pub fn is_nan_mask(self) -> BVec3
Performs is_nan on each element of self, returning a vector mask of the results.
In other words, this computes [x.is_nan(), y.is_nan(), ...].
pub fn length_squared(self) -> f32
pub fn length_squared(self) -> f32
Computes the squared length of self.
This is faster than length() as it avoids a square root operation.
pub fn length_recip(self) -> f32
pub fn length_recip(self) -> f32
Computes 1.0 / length().
For valid results, self must not be of length zero.
pub fn distance_squared(self, rhs: Vec3) -> f32
pub fn distance_squared(self, rhs: Vec3) -> f32
Compute the squared euclidean distance between two points in space.
pub fn div_euclid(self, rhs: Vec3) -> Vec3
pub fn div_euclid(self, rhs: Vec3) -> Vec3
Returns the element-wise quotient of [Euclidean division] of self by rhs.
pub fn rem_euclid(self, rhs: Vec3) -> Vec3
pub fn rem_euclid(self, rhs: Vec3) -> Vec3
Returns the element-wise remainder of Euclidean division of self by rhs.
pub fn normalize(self) -> Vec3
pub fn normalize(self) -> Vec3
Returns self normalized to length 1.0.
For valid results, self must be finite and not of length zero, nor very close to zero.
See also Self::try_normalize() and Self::normalize_or_zero().
§Panics
Will panic if the resulting normalized vector is not finite when glam_assert is enabled.
pub fn try_normalize(self) -> Option<Vec3>
pub fn try_normalize(self) -> Option<Vec3>
Returns self normalized to length 1.0 if possible, else returns None.
In particular, if the input is zero (or very close to zero), or non-finite,
the result of this operation will be None.
See also Self::normalize_or_zero().
pub fn normalize_or(self, fallback: Vec3) -> Vec3
pub fn normalize_or(self, fallback: Vec3) -> Vec3
Returns self normalized to length 1.0 if possible, else returns a
fallback value.
In particular, if the input is zero (or very close to zero), or non-finite, the result of this operation will be the fallback value.
See also Self::try_normalize().
pub fn normalize_or_zero(self) -> Vec3
pub fn normalize_or_zero(self) -> Vec3
Returns self normalized to length 1.0 if possible, else returns zero.
In particular, if the input is zero (or very close to zero), or non-finite, the result of this operation will be zero.
See also Self::try_normalize().
pub fn normalize_and_length(self) -> (Vec3, f32)
pub fn normalize_and_length(self) -> (Vec3, f32)
Returns self normalized to length 1.0 and the length of self.
If self is zero length then (Self::X, 0.0) is returned.
pub fn is_normalized(self) -> bool
pub fn is_normalized(self) -> bool
Returns whether self is length 1.0 or not.
Uses a precision threshold of approximately 1e-4.
pub fn project_onto(self, rhs: Vec3) -> Vec3
pub fn project_onto(self, rhs: Vec3) -> Vec3
Returns the vector projection of self onto rhs.
rhs must be of non-zero length.
§Panics
Will panic if rhs is zero length when glam_assert is enabled.
pub fn reject_from(self, rhs: Vec3) -> Vec3
pub fn reject_from(self, rhs: Vec3) -> Vec3
Returns the vector rejection of self from rhs.
The vector rejection is the vector perpendicular to the projection of self onto
rhs, in rhs words the result of self - self.project_onto(rhs).
rhs must be of non-zero length.
§Panics
Will panic if rhs has a length of zero when glam_assert is enabled.
pub fn project_onto_normalized(self, rhs: Vec3) -> Vec3
pub fn project_onto_normalized(self, rhs: Vec3) -> Vec3
Returns the vector projection of self onto rhs.
rhs must be normalized.
§Panics
Will panic if rhs is not normalized when glam_assert is enabled.
pub fn reject_from_normalized(self, rhs: Vec3) -> Vec3
pub fn reject_from_normalized(self, rhs: Vec3) -> Vec3
Returns the vector rejection of self from rhs.
The vector rejection is the vector perpendicular to the projection of self onto
rhs, in rhs words the result of self - self.project_onto(rhs).
rhs must be normalized.
§Panics
Will panic if rhs is not normalized when glam_assert is enabled.
pub fn round(self) -> Vec3
pub fn round(self) -> Vec3
Returns a vector containing the nearest integer to a number for each element of self.
Round half-way cases away from 0.0.
pub fn floor(self) -> Vec3
pub fn floor(self) -> Vec3
Returns a vector containing the largest integer less than or equal to a number for each
element of self.
pub fn ceil(self) -> Vec3
pub fn ceil(self) -> Vec3
Returns a vector containing the smallest integer greater than or equal to a number for
each element of self.
pub fn trunc(self) -> Vec3
pub fn trunc(self) -> Vec3
Returns a vector containing the integer part each element of self. This means numbers are
always truncated towards zero.
pub fn step(self, rhs: Vec3) -> Vec3
pub fn step(self, rhs: Vec3) -> Vec3
Returns a vector containing 0.0 if rhs < self and 1.0 otherwise.
Similar to glsl’s step(edge, x), which translates into edge.step(x)
pub fn smoothstep(self, edge0: Vec3, edge1: Vec3) -> Vec3
pub fn smoothstep(self, edge0: Vec3, edge1: Vec3) -> Vec3
Performs Hermite interpolation between 0.0 and 1.0 using x normalized to [edge0, edge1].
This is equivalent to t * t * (3.0 - 2.0 * t), where t is clamped to [0.0, 1.0].
Results are undefined if any element of edge0 is greater than or equal to the corresponding
element of edge1.
§Panics
Will panic if any element of edge0 is greater than or equal to the corresponding element
of edge1, when glam_assert is enabled.
pub fn saturate(self) -> Vec3
pub fn saturate(self) -> Vec3
Returns a vector containing all elements of self clamped to the range of [0, 1].
pub fn fract(self) -> Vec3
pub fn fract(self) -> Vec3
Returns a vector containing the fractional part of the vector as self - self.trunc().
Note that this differs from the GLSL implementation of fract which returns
self - self.floor().
Note that this is fast but not precise for large numbers.
pub fn fract_gl(self) -> Vec3
pub fn fract_gl(self) -> Vec3
Returns a vector containing the fractional part of the vector as self - self.floor().
Note that this differs from the Rust implementation of fract which returns
self - self.trunc().
Note that this is fast but not precise for large numbers.
pub fn exp(self) -> Vec3
pub fn exp(self) -> Vec3
Returns a vector containing e^self (the exponential function) for each element of
self.
pub fn ln(self) -> Vec3
pub fn ln(self) -> Vec3
Returns a vector containing the natural logarithm for each element of self.
This returns NaN when the element is negative and negative infinity when the element is zero.
pub fn log2(self) -> Vec3
pub fn log2(self) -> Vec3
Returns a vector containing the base 2 logarithm for each element of self.
This returns NaN when the element is negative and negative infinity when the element is zero.
pub fn powf(self, n: f32) -> Vec3
pub fn powf(self, n: f32) -> Vec3
Returns a vector containing each element of self raised to the power of n.
pub fn sqrt(self) -> Vec3
pub fn sqrt(self) -> Vec3
Returns a vector containing the square root for each element of self.
This returns NaN when the element is negative.
pub fn sin_cos(self) -> (Vec3, Vec3)
pub fn sin_cos(self) -> (Vec3, Vec3)
Returns a tuple of two vectors containing the sine and cosine for each element of self.
pub fn lerp(self, rhs: Vec3, s: f32) -> Vec3
pub fn lerp(self, rhs: Vec3, s: f32) -> Vec3
Performs a linear interpolation between self and rhs based on the value s, using the
form self * (1.0 - s) + rhs * s.
When s is 0.0, the result will be equal to self. When s is 1.0, the result will
be equal to rhs. When s is outside of the range [0, 1], the result is linearly
extrapolated.
The result is guaranteed to be self at s == 0.0 and rhs at s == 1.0, even when the
values differ greatly in magnitude, but it is not monotonic in s for nearly equal inputs
and may not preserve equal inputs exactly. Consider lerp_monotonic
instead when interpolating between values that may be equal or nearly equal.
pub fn lerp_monotonic(self, rhs: Vec3, s: f32) -> Vec3
pub fn lerp_monotonic(self, rhs: Vec3, s: f32) -> Vec3
Performs a linear interpolation between self and rhs based on the value s, using the
monotonic form self + (rhs - self) * s.
When s is 0.0, the result will be equal to self. When s is 1.0, the result will
be equal to rhs. When s is outside of the range [0, 1], the result is linearly
extrapolated.
Prefer this over lerp when interpolating between values that may be equal or
nearly equal: the result is monotonic in s and equal inputs are preserved exactly, avoiding
the rounding jitter that lerp can introduce. The tradeoff is that
rhs - self is evaluated first, so this is less accurate than lerp when
self and rhs differ greatly in magnitude, and overflows to infinity when they have
opposite signs and large magnitudes.
On SIMD back-ends the multiply and add are fused when the target supports it, which has a single rounding step and can be more accurate than a separate multiply and add.
pub fn move_towards(self, rhs: Vec3, d: f32) -> Vec3
pub fn move_towards(self, rhs: Vec3, d: f32) -> Vec3
Moves towards rhs based on the value d.
When d is 0.0, the result will be equal to self. When d is equal to
self.distance(rhs), the result will be equal to rhs. Will not go past rhs.
pub fn midpoint(self, rhs: Vec3) -> Vec3
pub fn midpoint(self, rhs: Vec3) -> Vec3
Calculates the midpoint between self and rhs.
The midpoint is the average of, or halfway point between, two vectors.
a.midpoint(b) should yield the same result as a.lerp(b, 0.5)
while being slightly cheaper to compute.
pub fn abs_diff_eq(self, rhs: Vec3, max_abs_diff: f32) -> bool
pub fn abs_diff_eq(self, rhs: Vec3, max_abs_diff: f32) -> bool
Returns true if the absolute difference of all elements between self and rhs is
less than or equal to max_abs_diff.
This can be used to compare if two vectors contain similar elements. It works best when
comparing with a known value. The max_abs_diff that should be used used depends on
the values being compared against.
For more see comparing floating point numbers.
pub fn clamp_length(self, min: f32, max: f32) -> Vec3
pub fn clamp_length(self, min: f32, max: f32) -> Vec3
Returns a vector with a length no less than min and no more than max.
§Panics
Will panic if min is greater than max, or if either min or max is negative, when glam_assert is enabled.
pub fn clamp_length_max(self, max: f32) -> Vec3
pub fn clamp_length_max(self, max: f32) -> Vec3
Returns a vector with a length no more than max.
§Panics
Will panic if max is negative when glam_assert is enabled.
pub fn clamp_length_min(self, min: f32) -> Vec3
pub fn clamp_length_min(self, min: f32) -> Vec3
Returns a vector with a length no less than min.
§Panics
Will panic if min is negative when glam_assert is enabled.
pub fn mul_add(self, a: Vec3, b: Vec3) -> Vec3
pub fn mul_add(self, a: Vec3, b: Vec3) -> Vec3
Fused multiply-add. Computes (self * a) + b element-wise with only one rounding
error, yielding a more accurate result than an unfused multiply-add.
Using mul_add may be more performant than an unfused multiply-add if the target
architecture has a dedicated fma CPU instruction. However, this is not always true,
and will be heavily dependant on designing algorithms with specific target hardware in
mind.
pub fn reflect(self, normal: Vec3) -> Vec3
pub fn reflect(self, normal: Vec3) -> Vec3
Returns the reflection vector for a given incident vector self and surface normal
normal.
normal must be normalized.
§Panics
Will panic if normal is not normalized when glam_assert is enabled.
pub fn refract(self, normal: Vec3, eta: f32) -> Vec3
pub fn refract(self, normal: Vec3, eta: f32) -> Vec3
Returns the refraction direction for a given incident vector self, surface normal
normal and ratio of indices of refraction, eta. When total internal reflection occurs,
a zero vector will be returned.
self and normal must be normalized.
§Panics
Will panic if self or normal is not normalized when glam_assert is enabled.
pub fn angle_between(self, rhs: Vec3) -> f32
pub fn angle_between(self, rhs: Vec3) -> f32
Returns the angle (in radians) between two vectors in the range [0, +π].
For the full rotation between two vectors as a quaternion, see
[Quat::from_rotation_arc].
The inputs do not need to be unit vectors however they must be non-zero.
§Panics
Will panic if self or rhs has zero length when glam_assert is enabled.
pub fn angle_to(self, rhs: Vec3, axis: Vec3) -> f32
pub fn angle_to(self, rhs: Vec3, axis: Vec3) -> f32
Returns the signed angle (in radians) from self to rhs around axis
in the range [-π, +π].
The axis must be a unit vector. The angle follows the right-hand rule
around axis and can be used with Self::rotate_axis, e.g.
self.rotate_axis(axis, self.angle_to(rhs, axis)) will be equal to rhs.
For the unsigned angle without a reference axis, see Self::angle_between.
The inputs do not need to be unit vectors however they must be non-zero.
§Panics
Will panic if axis is not normalized when glam_assert is enabled.
Will panic if self or rhs has zero length when glam_assert is enabled.
pub fn rotate_axis(self, axis: Vec3, angle: f32) -> Vec3
pub fn rotate_axis(self, axis: Vec3, angle: f32) -> Vec3
Rotates around axis by angle (in radians).
The axis must be a unit vector.
§Panics
Will panic if axis is not normalized when glam_assert is enabled.
pub fn rotate_towards(self, rhs: Vec3, max_angle: f32) -> Vec3
pub fn rotate_towards(self, rhs: Vec3, max_angle: f32) -> Vec3
Rotates towards rhs up to max_angle (in radians).
When max_angle is 0.0, the result will be equal to self. When max_angle is equal to
self.angle_between(rhs), the result will be parallel to rhs. If max_angle is negative,
rotates towards the exact opposite of rhs. Will not go past the target.
§Panics
Will panic if self or rhs are zero length when glam_assert is enabled.
pub fn any_orthogonal_vector(self) -> Vec3
pub fn any_orthogonal_vector(self) -> Vec3
Returns some vector that is orthogonal to the given one.
The input vector must be finite and non-zero.
The output vector is not necessarily unit length. For that use
Self::any_orthonormal_vector() instead.
pub fn any_orthonormal_vector(self) -> Vec3
pub fn any_orthonormal_vector(self) -> Vec3
Returns any unit vector that is orthogonal to the given one.
The input vector must be unit length.
§Panics
Will panic if self is not normalized when glam_assert is enabled.
pub fn any_orthonormal_pair(self) -> (Vec3, Vec3)
pub fn any_orthonormal_pair(self) -> (Vec3, Vec3)
Given a unit vector return two other vectors that together form a right-handed orthonormal basis. That is, all three vectors are orthogonal to each other and are normalized.
§Panics
Will panic if self is not normalized when glam_assert is enabled.
pub fn slerp(self, rhs: Vec3, s: f32) -> Vec3
pub fn slerp(self, rhs: Vec3, s: f32) -> Vec3
Performs a spherical linear interpolation between self and rhs based on the value s.
When s is 0.0, the result will be equal to self. When s is 1.0, the result
will be equal to rhs. When s is outside of range [0, 1], the result is linearly
extrapolated.
§Panics
Will panic if self or rhs has zero length when glam_assert is enabled.
pub fn as_dvec3(self) -> DVec3
pub fn as_dvec3(self) -> DVec3
Casts all elements of self to f64.
pub fn as_i8vec3(self) -> I8Vec3
pub fn as_i8vec3(self) -> I8Vec3
Casts all elements of self to i8.
pub fn as_u8vec3(self) -> U8Vec3
pub fn as_u8vec3(self) -> U8Vec3
Casts all elements of self to u8.
pub fn as_i16vec3(self) -> I16Vec3
pub fn as_i16vec3(self) -> I16Vec3
Casts all elements of self to i16.
pub fn as_u16vec3(self) -> U16Vec3
pub fn as_u16vec3(self) -> U16Vec3
Casts all elements of self to u16.
pub fn as_ivec3(self) -> IVec3
pub fn as_ivec3(self) -> IVec3
Casts all elements of self to i32.
pub fn as_uvec3(self) -> UVec3
pub fn as_uvec3(self) -> UVec3
Casts all elements of self to u32.
pub fn as_i64vec3(self) -> I64Vec3
pub fn as_i64vec3(self) -> I64Vec3
Casts all elements of self to i64.
pub fn as_u64vec3(self) -> U64Vec3
pub fn as_u64vec3(self) -> U64Vec3
Casts all elements of self to u64.
Trait Implementations§
§impl AbsDiffEq for Vec3
impl AbsDiffEq for Vec3
§fn default_epsilon() -> <Vec3 as AbsDiffEq>::Epsilon
fn default_epsilon() -> <Vec3 as AbsDiffEq>::Epsilon
§fn abs_diff_eq(
&self,
other: &Vec3,
epsilon: <Vec3 as AbsDiffEq>::Epsilon,
) -> bool
fn abs_diff_eq( &self, other: &Vec3, epsilon: <Vec3 as AbsDiffEq>::Epsilon, ) -> bool
Source§fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
AbsDiffEq::abs_diff_eq.§impl AddAssign<&Vec3> for Vec3
impl AddAssign<&Vec3> for Vec3
§fn add_assign(&mut self, rhs: &Vec3)
fn add_assign(&mut self, rhs: &Vec3)
+= operation. Read more§impl AddAssign<&f32> for Vec3
impl AddAssign<&f32> for Vec3
§fn add_assign(&mut self, rhs: &f32)
fn add_assign(&mut self, rhs: &f32)
+= operation. Read more§impl AddAssign<f32> for Vec3
impl AddAssign<f32> for Vec3
§fn add_assign(&mut self, rhs: f32)
fn add_assign(&mut self, rhs: f32)
+= operation. Read more§impl AsMutVectorParts<f32, 3> for Vec3
impl AsMutVectorParts<f32, 3> for Vec3
fn as_mut_parts(&mut self) -> &mut [f32; 3]
§impl AsRefVectorParts<f32, 3> for Vec3
impl AsRefVectorParts<f32, 3> for Vec3
fn as_ref_parts(&self) -> &[f32; 3]
impl Copy for Vec3
§impl CreateFrom for Vec3
impl CreateFrom for Vec3
fn create_from<B>(reader: &mut Reader<B>) -> Vec3where
B: BufferRef,
§impl<'de> Deserialize<'de> for Vec3
Deserialize expects a sequence of 3 values.
impl<'de> Deserialize<'de> for Vec3
Deserialize expects a sequence of 3 values.
§fn deserialize<D>(
deserializer: D,
) -> Result<Vec3, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Vec3, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
§impl DivAssign<&Vec3> for Vec3
impl DivAssign<&Vec3> for Vec3
§fn div_assign(&mut self, rhs: &Vec3)
fn div_assign(&mut self, rhs: &Vec3)
/= operation. Read more§impl DivAssign<&f32> for Vec3
impl DivAssign<&f32> for Vec3
§fn div_assign(&mut self, rhs: &f32)
fn div_assign(&mut self, rhs: &f32)
/= operation. Read more§impl DivAssign<f32> for Vec3
impl DivAssign<f32> for Vec3
§fn div_assign(&mut self, rhs: f32)
fn div_assign(&mut self, rhs: f32)
/= operation. Read more§impl FromVectorParts<f32, 3> for Vec3
impl FromVectorParts<f32, 3> for Vec3
fn from_parts(parts: [f32; 3]) -> Vec3
§impl MulAssign<&Vec3> for Vec3
impl MulAssign<&Vec3> for Vec3
§fn mul_assign(&mut self, rhs: &Vec3)
fn mul_assign(&mut self, rhs: &Vec3)
*= operation. Read more§impl MulAssign<&f32> for Vec3
impl MulAssign<&f32> for Vec3
§fn mul_assign(&mut self, rhs: &f32)
fn mul_assign(&mut self, rhs: &f32)
*= operation. Read more§impl MulAssign<f32> for Vec3
impl MulAssign<f32> for Vec3
§fn mul_assign(&mut self, rhs: f32)
fn mul_assign(&mut self, rhs: f32)
*= operation. Read moreimpl Pod for Vec3
§impl RelativeEq for Vec3
impl RelativeEq for Vec3
§fn default_max_relative() -> <Vec3 as AbsDiffEq>::Epsilon
fn default_max_relative() -> <Vec3 as AbsDiffEq>::Epsilon
§fn relative_eq(
&self,
other: &Vec3,
epsilon: <Vec3 as AbsDiffEq>::Epsilon,
max_relative: <Vec3 as AbsDiffEq>::Epsilon,
) -> bool
fn relative_eq( &self, other: &Vec3, epsilon: <Vec3 as AbsDiffEq>::Epsilon, max_relative: <Vec3 as AbsDiffEq>::Epsilon, ) -> bool
Source§fn relative_ne(
&self,
other: &Rhs,
epsilon: Self::Epsilon,
max_relative: Self::Epsilon,
) -> bool
fn relative_ne( &self, other: &Rhs, epsilon: Self::Epsilon, max_relative: Self::Epsilon, ) -> bool
RelativeEq::relative_eq.§impl RemAssign<&Vec3> for Vec3
impl RemAssign<&Vec3> for Vec3
§fn rem_assign(&mut self, rhs: &Vec3)
fn rem_assign(&mut self, rhs: &Vec3)
%= operation. Read more§impl RemAssign<&f32> for Vec3
impl RemAssign<&f32> for Vec3
§fn rem_assign(&mut self, rhs: &f32)
fn rem_assign(&mut self, rhs: &f32)
%= operation. Read more§impl RemAssign<f32> for Vec3
impl RemAssign<f32> for Vec3
§fn rem_assign(&mut self, rhs: f32)
fn rem_assign(&mut self, rhs: f32)
%= operation. Read more§impl SampleUniform for Vec3
impl SampleUniform for Vec3
§type Sampler = UniformVec3<UniformFloat<f32>>
type Sampler = UniformVec3<UniformFloat<f32>>
UniformSampler implementation supporting type X.§impl Serialize for Vec3
Serialize as a sequence of 3 values.
impl Serialize for Vec3
Serialize as a sequence of 3 values.
§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
§impl ShaderSize for Vec3where
f32: ShaderSize,
impl ShaderSize for Vec3where
f32: ShaderSize,
Source§const SHADER_SIZE: NonZero<u64> = _
const SHADER_SIZE: NonZero<u64> = _
ShaderType::min_size)§impl ShaderType for Vec3where
f32: ShaderSize,
impl ShaderType for Vec3where
f32: ShaderSize,
Source§fn assert_uniform_compat()
fn assert_uniform_compat()
Self meets the requirements of the
uniform address space restrictions on stored values and the
uniform address space layout constraints Read moreimpl StructuralPartialEq for Vec3
§impl SubAssign<&Vec3> for Vec3
impl SubAssign<&Vec3> for Vec3
§fn sub_assign(&mut self, rhs: &Vec3)
fn sub_assign(&mut self, rhs: &Vec3)
-= operation. Read more§impl SubAssign<&f32> for Vec3
impl SubAssign<&f32> for Vec3
§fn sub_assign(&mut self, rhs: &f32)
fn sub_assign(&mut self, rhs: &f32)
-= operation. Read more§impl SubAssign<f32> for Vec3
impl SubAssign<f32> for Vec3
§fn sub_assign(&mut self, rhs: f32)
fn sub_assign(&mut self, rhs: f32)
-= operation. Read more§impl UlpsEq for Vec3
impl UlpsEq for Vec3
§impl Vec3Swizzles for Vec3
impl Vec3Swizzles for Vec3
type Vec2 = Vec2
type Vec4 = Vec4
fn xx(self) -> Vec2
fn xy(self) -> Vec2
fn with_xy(self, rhs: Vec2) -> Vec3
fn xz(self) -> Vec2
fn with_xz(self, rhs: Vec2) -> Vec3
fn yx(self) -> Vec2
fn with_yx(self, rhs: Vec2) -> Vec3
fn yy(self) -> Vec2
fn yz(self) -> Vec2
fn with_yz(self, rhs: Vec2) -> Vec3
fn zx(self) -> Vec2
fn with_zx(self, rhs: Vec2) -> Vec3
fn zy(self) -> Vec2
fn with_zy(self, rhs: Vec2) -> Vec3
fn zz(self) -> Vec2
fn xxx(self) -> Vec3
fn xxy(self) -> Vec3
fn xxz(self) -> Vec3
fn xyx(self) -> Vec3
fn xyy(self) -> Vec3
fn xzx(self) -> Vec3
fn xzy(self) -> Vec3
fn xzz(self) -> Vec3
fn yxx(self) -> Vec3
fn yxy(self) -> Vec3
fn yxz(self) -> Vec3
fn yyx(self) -> Vec3
fn yyy(self) -> Vec3
fn yyz(self) -> Vec3
fn yzx(self) -> Vec3
fn yzy(self) -> Vec3
fn yzz(self) -> Vec3
fn zxx(self) -> Vec3
fn zxy(self) -> Vec3
fn zxz(self) -> Vec3
fn zyx(self) -> Vec3
fn zyy(self) -> Vec3
fn zyz(self) -> Vec3
fn zzx(self) -> Vec3
fn zzy(self) -> Vec3
fn zzz(self) -> Vec3
fn xxxx(self) -> Vec4
fn xxxy(self) -> Vec4
fn xxxz(self) -> Vec4
fn xxyx(self) -> Vec4
fn xxyy(self) -> Vec4
fn xxyz(self) -> Vec4
fn xxzx(self) -> Vec4
fn xxzy(self) -> Vec4
fn xxzz(self) -> Vec4
fn xyxx(self) -> Vec4
fn xyxy(self) -> Vec4
fn xyxz(self) -> Vec4
fn xyyx(self) -> Vec4
fn xyyy(self) -> Vec4
fn xyyz(self) -> Vec4
fn xyzx(self) -> Vec4
fn xyzy(self) -> Vec4
fn xyzz(self) -> Vec4
fn xzxx(self) -> Vec4
fn xzxy(self) -> Vec4
fn xzxz(self) -> Vec4
fn xzyx(self) -> Vec4
fn xzyy(self) -> Vec4
fn xzyz(self) -> Vec4
fn xzzx(self) -> Vec4
fn xzzy(self) -> Vec4
fn xzzz(self) -> Vec4
fn yxxx(self) -> Vec4
fn yxxy(self) -> Vec4
fn yxxz(self) -> Vec4
fn yxyx(self) -> Vec4
fn yxyy(self) -> Vec4
fn yxyz(self) -> Vec4
fn yxzx(self) -> Vec4
fn yxzy(self) -> Vec4
fn yxzz(self) -> Vec4
fn yyxx(self) -> Vec4
fn yyxy(self) -> Vec4
fn yyxz(self) -> Vec4
fn yyyx(self) -> Vec4
fn yyyy(self) -> Vec4
fn yyyz(self) -> Vec4
fn yyzx(self) -> Vec4
fn yyzy(self) -> Vec4
fn yyzz(self) -> Vec4
fn yzxx(self) -> Vec4
fn yzxy(self) -> Vec4
fn yzxz(self) -> Vec4
fn yzyx(self) -> Vec4
fn yzyy(self) -> Vec4
fn yzyz(self) -> Vec4
fn yzzx(self) -> Vec4
fn yzzy(self) -> Vec4
fn yzzz(self) -> Vec4
fn zxxx(self) -> Vec4
fn zxxy(self) -> Vec4
fn zxxz(self) -> Vec4
fn zxyx(self) -> Vec4
fn zxyy(self) -> Vec4
fn zxyz(self) -> Vec4
fn zxzx(self) -> Vec4
fn zxzy(self) -> Vec4
fn zxzz(self) -> Vec4
fn zyxx(self) -> Vec4
fn zyxy(self) -> Vec4
fn zyxz(self) -> Vec4
fn zyyx(self) -> Vec4
fn zyyy(self) -> Vec4
fn zyyz(self) -> Vec4
fn zyzx(self) -> Vec4
fn zyzy(self) -> Vec4
fn zyzz(self) -> Vec4
fn zzxx(self) -> Vec4
fn zzxy(self) -> Vec4
fn zzxz(self) -> Vec4
fn zzyx(self) -> Vec4
fn zzyy(self) -> Vec4
fn zzyz(self) -> Vec4
fn zzzx(self) -> Vec4
fn zzzy(self) -> Vec4
fn zzzz(self) -> Vec4
fn xyz(self) -> Self
Auto Trait Implementations§
impl Freeze for Vec3
impl RefUnwindSafe for Vec3
impl Send for Vec3
impl Sync for Vec3
impl Unpin for Vec3
impl UnsafeUnpin for Vec3
impl UnwindSafe for Vec3
Blanket Implementations§
impl<T> AnyBitPattern for Twhere
T: Pod,
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> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
Source§type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern.Source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, Right> ClosedAdd<Right> for T
impl<T, Right> ClosedAddAssign<Right> for T
impl<T, Right> ClosedDiv<Right> for T
impl<T, Right> ClosedDivAssign<Right> for T
impl<T, Right> ClosedMul<Right> for T
impl<T, Right> ClosedMulAssign<Right> for T
impl<T> ClosedNeg for Twhere
T: Neg<Output = T>,
impl<T, Right> ClosedSub<Right> for T
impl<T, Right> ClosedSubAssign<Right> for T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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> 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 moreimpl<T> NoUninit for Twhere
T: Pod,
impl<T, Rhs> NumAssignOps<Rhs> for T
impl<T, Rhs, Output> NumOps<Rhs, Output> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T, Base> RefNum<Base> for T
Source§impl<Borrowed> SampleBorrow<Borrowed> for Borrowedwhere
Borrowed: SampleUniform,
impl<Borrowed> SampleBorrow<Borrowed> for Borrowedwhere
Borrowed: SampleUniform,
Source§fn borrow(&self) -> &Borrowed
fn borrow(&self) -> &Borrowed
Borrow::borrowimpl<T> Scalar for T
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.