pub struct MatrixStack(/* private fields */);
Implementations§
Source§impl MatrixStack
impl MatrixStack
Sourcepub fn new(ctx: &Context) -> MatrixStack
pub fn new(ctx: &Context) -> MatrixStack
Allocates a new MatrixStack
that can be used to build up
transformations relating to objects in a scenegraph like hierarchy.
(See the description of MatrixStack
and MatrixEntry
for
more details of what a matrix stack is best suited for)
When a MatrixStack
is first allocated it is conceptually
positioned at the root of your scenegraph hierarchy. As you
traverse your scenegraph then you should call
MatrixStack::push
whenever you move down a level and
MatrixStack::pop
whenever you move back up a level towards
the root.
Once you have allocated a MatrixStack
you can get a reference
to the current transformation for the current position in the
hierarchy by calling MatrixStack::get_entry
.
Once you have allocated a MatrixStack
you can apply operations
such as rotate, scale and translate to modify the current transform
for the current position in the hierarchy by calling
MatrixStack::rotate
, MatrixStack::scale
and
MatrixStack::translate
.
§ctx
A Context
§Returns
A newly allocated MatrixStack
Sourcepub fn frustum(
&self,
left: f32,
right: f32,
bottom: f32,
top: f32,
z_near: f32,
z_far: f32,
)
pub fn frustum( &self, left: f32, right: f32, bottom: f32, top: f32, z_near: f32, z_far: f32, )
Replaces the current matrix with a perspective matrix for a given viewing frustum defined by 4 side clip planes that all cross through the origin and 2 near and far clip planes.
§left
X position of the left clipping plane where it intersects the near clipping plane
§right
X position of the right clipping plane where it intersects the near clipping plane
§bottom
Y position of the bottom clipping plane where it intersects the near clipping plane
§top
Y position of the top clipping plane where it intersects the near clipping plane
§z_near
The distance to the near clipping plane (Must be positive)
§z_far
The distance to the far clipping plane (Must be positive)
Sourcepub fn get(&self) -> (Matrix, Matrix)
pub fn get(&self) -> (Matrix, Matrix)
Resolves the current self
transform into a Matrix
by
combining the operations that have been applied to build up the
current transform.
There are two possible ways that this function may return its
result depending on whether the stack is able to directly point
to an internal Matrix
or whether the result needs to be
composed of multiple operations.
If an internal matrix contains the required result then this
function will directly return a pointer to that matrix, otherwise
if the function returns None
then matrix
will be initialized
to match the current transform of self
.
<note>``matrix
will be left untouched if a direct pointer is
returned.</note>
§matrix
The potential destination for the current matrix
§Returns
A direct pointer to the current transform or None
and in that case matrix
will be initialized with
the value of the current transform.
Sourcepub fn get_entry(&self) -> Option<MatrixEntry>
pub fn get_entry(&self) -> Option<MatrixEntry>
Gets a reference to the current transform represented by a
MatrixEntry
pointer.
<note>
The transform represented by a MatrixEntry
is
immutable.</note>
<note>``MatrixEntry
s are reference counted using
MatrixEntry::ref
and MatrixEntry::unref
and you
should call MatrixEntry::unref
when you are finished with
and entry you get via MatrixStack::get_entry
.</note>
§Returns
A pointer to the MatrixEntry
representing the current matrix stack transform.
Sourcepub fn get_inverse(&self) -> (bool, Matrix)
pub fn get_inverse(&self) -> (bool, Matrix)
Gets the inverse transform of the current matrix and uses it to
initialize a new Matrix
.
§inverse
The destination for a 4x4 inverse transformation matrix
§Returns
true
if the inverse was successfully calculated or false
for degenerate transformations that can’t be inverted (in this case the
inverse
matrix will simply be initialized with the identity matrix)
Sourcepub fn load_identity(&self)
pub fn load_identity(&self)
Resets the current matrix to the identity matrix.
Sourcepub fn multiply(&self, matrix: &Matrix)
pub fn multiply(&self, matrix: &Matrix)
Multiplies the current matrix by the given matrix.
§matrix
the matrix to multiply with the current model-view
Sourcepub fn orthographic(
&self,
x_1: f32,
y_1: f32,
x_2: f32,
y_2: f32,
near: f32,
far: f32,
)
pub fn orthographic( &self, x_1: f32, y_1: f32, x_2: f32, y_2: f32, near: f32, far: f32, )
Replaces the current matrix with an orthographic projection matrix.
§x_1
The x coordinate for the first vertical clipping plane
§y_1
The y coordinate for the first horizontal clipping plane
§x_2
The x coordinate for the second vertical clipping plane
§y_2
The y coordinate for the second horizontal clipping plane
§near
The <emphasis>
distance</emphasis>
to the near clipping
plane (will be <emphasis>
negative</emphasis>
if the plane is
behind the viewer)
§far
The <emphasis>
distance</emphasis>
to the far clipping
plane (will be <emphasis>
negative</emphasis>
if the plane is
behind the viewer)
Sourcepub fn perspective(&self, fov_y: f32, aspect: f32, z_near: f32, z_far: f32)
pub fn perspective(&self, fov_y: f32, aspect: f32, z_near: f32, z_far: f32)
Replaces the current matrix with a perspective matrix based on the provided values.
<note>
You should be careful not to have too great a z_far
/ z_near
ratio since that will reduce the effectiveness of depth testing
since there wont be enough precision to identify the depth of
objects near to each other.</note>
§fov_y
Vertical field of view angle in degrees.
§aspect
The (width over height) aspect ratio for display
§z_near
The distance to the near clipping plane (Must be positive, and must not be 0)
§z_far
The distance to the far clipping plane (Must be positive)
Sourcepub fn pop(&self)
pub fn pop(&self)
Restores the previous transform that was last saved by calling
MatrixStack::push
.
This is usually called while traversing a scenegraph whenever you return up one level in the graph towards the root node.
Sourcepub fn push(&self)
pub fn push(&self)
Saves the current transform and starts a new transform that derives from the current transform.
This is usually called while traversing a scenegraph whenever you
traverse one level deeper. MatrixStack::pop
can then be
called when going back up one layer to restore the previous
transform of an ancestor.
Sourcepub fn rotate(&self, angle: f32, x: f32, y: f32, z: f32)
pub fn rotate(&self, angle: f32, x: f32, y: f32, z: f32)
Multiplies the current matrix by one that rotates the around the
axis-vector specified by x
, y
and z
. The rotation follows the
right-hand thumb rule so for example rotating by 10 degrees about
the axis-vector (0, 0, 1) causes a small counter-clockwise
rotation.
§angle
Angle in degrees to rotate.
§x
X-component of vertex to rotate around.
§y
Y-component of vertex to rotate around.
§z
Z-component of vertex to rotate around.
Sourcepub fn rotate_euler(&self, euler: &Euler)
pub fn rotate_euler(&self, euler: &Euler)
Multiplies the current matrix by one that rotates according to the
rotation described by euler
.
§euler
A Euler
Sourcepub fn rotate_quaternion(&self, quaternion: &Quaternion)
pub fn rotate_quaternion(&self, quaternion: &Quaternion)
Multiplies the current matrix by one that rotates according to the
rotation described by quaternion
.
§quaternion
A Quaternion
Sourcepub fn set(&self, matrix: &Matrix)
pub fn set(&self, matrix: &Matrix)
Replaces the current self
matrix value with the value of matrix
.
This effectively discards any other operations that were applied
since the last time MatrixStack::push
was called or since
the stack was initialized.
§matrix
A Matrix
replace the current matrix value with
Trait Implementations§
Source§impl Clone for MatrixStack
impl Clone for MatrixStack
Source§fn clone(&self) -> MatrixStack
fn clone(&self) -> MatrixStack
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MatrixStack
impl Debug for MatrixStack
Source§impl Display for MatrixStack
impl Display for MatrixStack
Source§impl Hash for MatrixStack
impl Hash for MatrixStack
Source§impl Ord for MatrixStack
impl Ord for MatrixStack
Source§fn cmp(&self, other: &MatrixStack) -> Ordering
fn cmp(&self, other: &MatrixStack) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<T: ObjectType> PartialEq<T> for MatrixStack
impl<T: ObjectType> PartialEq<T> for MatrixStack
Source§impl<T: ObjectType> PartialOrd<T> for MatrixStack
impl<T: ObjectType> PartialOrd<T> for MatrixStack
Source§impl StaticType for MatrixStack
impl StaticType for MatrixStack
Source§fn static_type() -> Type
fn static_type() -> Type
Self
.impl Eq for MatrixStack
impl IsA<Object> for MatrixStack
Auto Trait Implementations§
impl Freeze for MatrixStack
impl RefUnwindSafe for MatrixStack
impl !Send for MatrixStack
impl !Sync for MatrixStack
impl Unpin for MatrixStack
impl UnwindSafe for MatrixStack
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> Cast for Twhere
T: ObjectType,
impl<T> Cast for Twhere
T: ObjectType,
Source§fn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
T
. Read moreSource§fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
T
. Read moreSource§fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: CanDowncast<T>,
T
. Read moreSource§fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: CanDowncast<T>,
T
. Read moreSource§fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already. Read moreSource§fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
T
. This handles upcasting, downcasting
and casting between interface and interface implementors. All checks are performed at
runtime, while downcast
and upcast
will do many checks at compile-time already. Read moreSource§unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
T
unconditionally. Read moreSource§unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
&T
unconditionally. Read moreSource§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
Source§impl<T> ObjectExt for Twhere
T: ObjectType,
impl<T> ObjectExt for Twhere
T: ObjectType,
Source§fn is<U>(&self) -> boolwhere
U: StaticType,
fn is<U>(&self) -> boolwhere
U: StaticType,
true
if the object is an instance of (can be cast to) T
.