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: f32The aspect the view was built for, after its clamp.
distance: f32Eye to orbit target, after its clamp.
Implementations§
Source§impl CameraView
impl CameraView
Sourcepub fn clip(&self, p: [f32; 3]) -> [f32; 4]
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).
Sourcepub fn focal_depth(&self, focus: f32, radius: f32) -> f32
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.
Sourcepub fn depth(&self, p: [f32; 3]) -> f32
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.
Sourcepub fn clip_near(
&self,
a: [f32; 3],
b: [f32; 3],
) -> Option<([f32; 3], [f32; 3])>
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.
Sourcepub fn outside(&self, a: [f32; 3], b: [f32; 3], margin: f32) -> bool
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
impl Clone for CameraView
Source§fn clone(&self) -> CameraView
fn clone(&self) -> CameraView
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CameraView
impl Debug for CameraView
Source§impl PartialEq for CameraView
impl PartialEq for CameraView
Source§fn eq(&self, other: &CameraView) -> bool
fn eq(&self, other: &CameraView) -> bool
self and other values to be equal, and is used by ==.