pub struct Camera {
pub position: Point3<f64>,
pub yaw: Rad<f64>,
pub pitch: Rad<f64>,
pub width: f64,
pub 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 transfrom 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
) -> Option<Vector3<f64>>
pub fn window_to_world_at_ground(
&self,
window: &Vector2<f64>,
inverted_view_proj: &InvertedViewProjection
) -> 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.
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 T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
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>
Convert 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 more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber to this type, returning a
WithDispatch wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber to this type, returning a
WithDispatch wrapper. Read more