Struct maplibre::render::view_state::ViewState
source · pub struct ViewState {
zoom: ChangeObserver<Zoom>,
camera: ChangeObserver<Camera>,
perspective: Perspective,
width: f64,
height: f64,
edge_insets: EdgeInsets,
}
Fields§
§zoom: ChangeObserver<Zoom>
§camera: ChangeObserver<Camera>
§perspective: Perspective
§width: f64
§height: f64
§edge_insets: EdgeInsets
Implementations§
source§impl ViewState
impl ViewState
pub fn new<F: Into<Rad<f64>>, P: Into<Deg<f64>>>( window_size: PhysicalSize, position: WorldCoords, zoom: Zoom, pitch: P, fovy: F ) -> Self
pub fn set_edge_insets(&mut self, edge_insets: EdgeInsets)
pub fn edge_insets(&self) -> &EdgeInsets
pub fn resize(&mut self, size: LogicalSize)
pub fn create_view_region(&self, visible_level: ZoomLevel) -> Option<ViewRegion>
pub fn get_intersection_time( ray_origin: Vector3<f64>, ray_direction: Vector3<f64>, plane_origin: Vector3<f64>, plane_normal: Vector3<f64> ) -> f64
pub fn furthest_distance( &self, camera_height: f64, center_offset: Point2<f64> ) -> f64
pub fn camera_to_center_distance(&self) -> f64
sourcepub fn view_projection(&self) -> ViewProjection
pub fn view_projection(&self) -> ViewProjection
This function matches how maplibre-gl-js implements perspective and cameras at the time of the mapbox -> maplibre fork: src/geo/transform.ts#L680
pub fn zoom(&self) -> Zoom
pub fn did_zoom_change(&self) -> bool
pub fn update_zoom(&mut self, new_zoom: Zoom)
pub fn camera(&self) -> &Camera
pub fn camera_mut(&mut self) -> &mut Camera
pub fn did_camera_change(&self) -> bool
pub fn update_references(&mut self)
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<Vector2<f64>>
pub fn window_to_world_at_ground( &self, window: &Vector2<f64>, inverted_view_proj: &InvertedViewProjection, bound: bool ) -> Option<Vector2<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) -> Option<Aabb2<f64>>
pub fn view_region_bounding_box_ndc(&self) -> 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.
Auto Trait Implementations§
impl Freeze for ViewState
impl RefUnwindSafe for ViewState
impl Send for ViewState
impl Sync for ViewState
impl Unpin for ViewState
impl UnwindSafe for ViewState
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn 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>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn 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.§fn 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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more