diff --git a/src/geometry/orthographic.rs b/src/geometry/orthographic.rs index 728a1c1f..253b1110 100644 --- a/src/geometry/orthographic.rs +++ b/src/geometry/orthographic.rs @@ -5,6 +5,7 @@ use rand::Rng; #[cfg(feature = "serde-serialize")] use serde::{Serialize, Deserialize, Serializer, Deserializer}; use std::fmt; +use std::mem; use alga::general::Real; @@ -13,7 +14,7 @@ use base::helper; use base::storage::Storage; use base::{Matrix4, Vector, Vector3}; -use geometry::Point3; +use geometry::{Projective3, Point3}; /// A 3D orthographic projection stored as an homogeneous 4x4 matrix. pub struct Orthographic3 { @@ -158,6 +159,18 @@ impl Orthographic3 { &self.matrix } + /// A reference to this transformation seen as a `Projective3`. + #[inline] + pub fn as_projective(&self) -> &Projective3 { + unsafe { mem::transmute(self) } + } + + /// This transformation seen as a `Projective3`. + #[inline] + pub fn to_projective(&self) -> Projective3 { + Projective3::from_matrix_unchecked(self.matrix) + } + /// Retrieves the underlying homogeneous matrix. #[inline] pub fn unwrap(self) -> Matrix4 { diff --git a/src/geometry/perspective.rs b/src/geometry/perspective.rs index 662d430b..4ceb29f0 100644 --- a/src/geometry/perspective.rs +++ b/src/geometry/perspective.rs @@ -6,6 +6,7 @@ use rand::Rng; #[cfg(feature = "serde-serialize")] use serde::{Serialize, Deserialize, Serializer, Deserializer}; use std::fmt; +use std::mem; use alga::general::Real; @@ -14,7 +15,7 @@ use base::helper; use base::storage::Storage; use base::{Matrix4, Scalar, Vector, Vector3}; -use geometry::Point3; +use geometry::{Projective3, Point3}; /// A 3D perspective projection stored as an homogeneous 4x4 matrix. pub struct Perspective3 { @@ -130,6 +131,18 @@ impl Perspective3 { &self.matrix } + /// A reference to this transformation seen as a `Projective3`. + #[inline] + pub fn as_projective(&self) -> &Projective3 { + unsafe { mem::transmute(self) } + } + + /// This transformation seen as a `Projective3`. + #[inline] + pub fn to_projective(&self) -> Projective3 { + Projective3::from_matrix_unchecked(self.matrix) + } + /// Retrieves the underlying homogeneous matrix. #[inline] pub fn unwrap(self) -> Matrix4 {