pub struct Camera {
position: Point3<f64>,
yaw: Rad<f64>,
pitch: Rad<f64>,
width: f64,
height: f64,
}Fields
position: Point3<f64>yaw: Rad<f64>pitch: Rad<f64>width: f64height: f64Implementations
sourceimpl Camera
impl Camera
pub fn new<V: Into<Point3<f64>>, Y: Into<Rad<f64>>, P: Into<Rad<f64>>>(
position: V,
yaw: Y,
pitch: P,
width: u32,
height: u32
) -> Self
pub fn resize(&mut self, width: u32, height: u32)
fn calc_matrix(&self) -> Matrix4<f64>
pub fn calc_view_proj(&self, perspective: &Perspective) -> ViewProjection
sourcefn clip_to_window_transform(&self) -> Matrix4<f64>
fn clip_to_window_transform(&self) -> Matrix4<f64>
A transform which can be used to transform between clip and window space. Adopted from here (Direct3D).
sourcefn clip_to_window(&self, clip: &Vector4<f64>) -> Vector4<f64>
fn clip_to_window(&self, clip: &Vector4<f64>) -> Vector4<f64>
Transforms coordinates in clip space to window coordinates.
Adopted from here (Direct3D).
sourcefn clip_to_window_vulkan(&self, clip: &Vector4<f64>) -> Vector3<f64>
fn clip_to_window_vulkan(&self, clip: &Vector4<f64>) -> Vector3<f64>
sourcefn window_to_world(
&self,
window: &Vector3<f64>,
inverted_view_proj: &InvertedViewProjection
) -> Vector3<f64>
fn window_to_world(
&self,
window: &Vector3<f64>,
inverted_view_proj: &InvertedViewProjection
) -> Vector3<f64>
Order of transformations reversed: https://computergraphics.stackexchange.com/questions/6087/screen-space-coordinates-to-eye-space-conversion/6093
w is lost.
OpenGL explanation: https://www.khronos.org/opengl/wiki/Compute_eye_space_from_window_space#From_window_to_ndc
sourcefn window_to_world_nalgebra(
window: &Vector3<f64>,
inverted_view_proj: &InvertedViewProjection,
width: f64,
height: f64
) -> Vector3<f64>
fn window_to_world_nalgebra(
window: &Vector3<f64>,
inverted_view_proj: &InvertedViewProjection,
width: f64,
height: f64
) -> Vector3<f64>
Alternative implementation to window_to_world
Adopted from here.
sourcepub fn window_to_world_at_ground(
&self,
window: &Vector2<f64>,
inverted_view_proj: &InvertedViewProjection,
bound: bool
) -> Option<Vector3<f64>>
pub fn window_to_world_at_ground(
&self,
window: &Vector2<f64>,
inverted_view_proj: &InvertedViewProjection,
bound: bool
) -> Option<Vector3<f64>>
Gets the world coordinates for the specified window coordinates on the z=0 plane.
sourcepub fn view_region_bounding_box(
&self,
inverted_view_proj: &InvertedViewProjection
) -> Option<Aabb2<f64>>
pub fn view_region_bounding_box(
&self,
inverted_view_proj: &InvertedViewProjection
) -> Option<Aabb2<f64>>
Calculates an Aabb2 bounding box which contains at least the visible area on the z=0
plane. One can think of it as being the bounding box of the geometry which forms the
intersection between the viewing frustum and the z=0 plane.
This implementation works in the world 3D space. It casts rays from the corners of the
window to calculate intersections points with the z=0 plane. Then a bounding box is
calculated.
Note: It is possible that no such bounding box exists. This is the case if the z=0 plane
is not in view.
sourcepub fn view_region_bounding_box_ndc(
&self,
perspective: &Perspective
) -> Option<Aabb2<f64>>
pub fn view_region_bounding_box_ndc(
&self,
perspective: &Perspective
) -> Option<Aabb2<f64>>
An alternative implementation for view_bounding_box.
This implementation works in the NDC space. We are creating a plane in the world 3D space. Then we are transforming it to the NDC space. In NDC space it is easy to calculate the intersection points between an Aabb3 and a plane. The resulting Aabb2 is returned.
pub fn position(&self) -> Point3<f64>
pub fn yaw(&self) -> Rad<f64>
pub fn rotate<P: Into<Rad<f64>>>(&mut self, delta: P)
pub fn pitch(&self) -> Rad<f64>
pub fn tilt<P: Into<Rad<f64>>>(&mut self, delta: P)
pub fn move_relative(&mut self, delta: Vector3<f64>)
pub fn move_to(&mut self, new_position: Point3<f64>)
pub fn position_vector(&self) -> Vector3<f64>
pub fn homogenous_position(&self) -> Vector4<f64>
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for Camera
impl Send for Camera
impl Sync for Camera
impl Unpin for Camera
impl UnwindSafe for Camera
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read morefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read morefn 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. Read morefn 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. Read more