Skip to main content

CameraView

Struct CameraView 

Source
pub struct CameraView {
    pub view_proj: [[f32; 4]; 4],
    pub aspect: f32,
    pub distance: f32,
}
Expand description

One frame’s projection: the matrix CAMERA_WGSL multiplies by, and what the CPU needs to clip against it.

Fields§

§view_proj: [[f32; 4]; 4]

World to clip, column-major.

§aspect: f32

The aspect the view was built for, after its clamp.

§distance: f32

Eye to orbit target, after its clamp.

Implementations§

Source§

impl CameraView

Source

pub fn clip(&self, p: [f32; 3]) -> [f32; 4]

p in clip space. The CPU mirror of project() in CAMERA_WGSL, the same four dot products in the same order: a column-major matrix times (p, 1).

Source

pub fn focal_depth(&self, focus: f32, radius: f32) -> f32

The view depth of the focal plane, for a volume of bounding radius radius about the orbit target and a normalized focus: 0 the volume’s nearest extent, 1 its farthest. Never nearer than NEAR.

Written as near + focus * (far - near) and not as near + 2 * focus * radius: the two differ in the last bit, and a reference depth that moves by a bit moves every stroke width with it.

Source

pub fn depth(&self, p: [f32; 3]) -> f32

The view depth of p: its distance in front of the eye along the view axis. Negative behind the eye.

Source

pub fn clip_near( &self, a: [f32; 3], b: [f32; 3], ) -> Option<([f32; 3], [f32; 3])>

The segment a -> b with any part nearer than NEAR cut away, or None when all of it is.

Clipped, not culled: a segment crossing the near plane keeps the part in front of it, so an edge the camera orbits through shortens instead of blinking out. The cut is taken in world space, where depth is linear along the segment, so the new endpoint lies exactly on the plane.

Source

pub fn outside(&self, a: [f32; 3], b: [f32; 3], margin: f32) -> bool

Whether the segment a -> b, both ends at or past NEAR, lies wholly outside one edge of the frame, allowing margin in normalized device units for the stroke’s own width.

Conservative on purpose: a segment both of whose ends are outside different edges may still cross the frame, and is kept.

Trait Implementations§

Source§

impl Clone for CameraView

Source§

fn clone(&self) -> CameraView

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CameraView

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for CameraView

Source§

fn eq(&self, other: &CameraView) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for CameraView

Source§

impl StructuralPartialEq for CameraView

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,