pub struct OrbitCameraController {
pub orbit_sensitivity: f32,
pub zoom_sensitivity: f32,
/* private fields */
}Expand description
High-level orbit / pan / zoom camera controller.
Wraps the lower-level ViewportInput resolver and applies semantic
camera actions to a Camera in a single apply_to_camera call.
§Integration pattern (winit / single window)
// --- AppState construction ---
controller.begin_frame(ViewportContext { hovered: true, focused: true, viewport_size });
// --- window_event ---
controller.push_event(translated_event);
// --- RedrawRequested ---
controller.apply_to_camera(&mut state.camera);
controller.begin_frame(ViewportContext { hovered: true, focused: true, viewport_size });
// ... render ...§Integration pattern (eframe / egui)
// --- update() ---
controller.begin_frame(ViewportContext {
hovered: response.hovered(),
focused: response.has_focus(),
viewport_size: [rect.width(), rect.height()],
});
// push events from ui.input(|i| { ... })
controller.apply_to_camera(&mut self.camera);Fields§
§orbit_sensitivity: f32Sensitivity for drag-based orbit (radians per pixel).
zoom_sensitivity: f32Sensitivity for scroll-based zoom (scale factor per pixel).
Implementations§
Source§impl OrbitCameraController
impl OrbitCameraController
Sourcepub const DEFAULT_ORBIT_SENSITIVITY: f32 = 0.005
pub const DEFAULT_ORBIT_SENSITIVITY: f32 = 0.005
Default drag orbit sensitivity: 0.005 radians per pixel.
Sourcepub const DEFAULT_ZOOM_SENSITIVITY: f32 = 0.001
pub const DEFAULT_ZOOM_SENSITIVITY: f32 = 0.001
Default scroll zoom sensitivity: 0.001 scale per pixel.
Sourcepub fn new(preset: BindingPreset) -> Self
pub fn new(preset: BindingPreset) -> Self
Create a controller from the given binding preset.
Sourcepub fn viewport_primitives() -> Self
pub fn viewport_primitives() -> Self
Create a controller with the BindingPreset::ViewportPrimitives preset.
This is the canonical control scheme matching examples/winit_primitives.
Sourcepub fn viewport_all() -> Self
pub fn viewport_all() -> Self
Create a controller with the BindingPreset::ViewportAll preset.
Includes all camera navigation bindings plus keyboard shortcuts for
normal mode, fly mode, and manipulation mode. Use this to replace
crate::InputSystem entirely.
Sourcepub fn begin_frame(&mut self, ctx: ViewportContext)
pub fn begin_frame(&mut self, ctx: ViewportContext)
Begin a new frame.
Resets per-frame accumulators and records viewport context (hover/focus
state and size). Call this at the end of each rendered frame — after
apply_to_camera — so the accumulator is ready for the next batch of
events.
Also call once immediately after construction to prime the accumulator.
Sourcepub fn push_event(&mut self, event: ViewportEvent)
pub fn push_event(&mut self, event: ViewportEvent)
Push a single viewport-scoped event into the accumulator.
Call this from the host’s event handler whenever a relevant native event
arrives, after translating it to a ViewportEvent.
Sourcepub fn resolve(&self) -> ActionFrame
pub fn resolve(&self) -> ActionFrame
Resolve accumulated events into an ActionFrame without applying any
camera navigation.
Use this when the caller needs to inspect actions but camera movement should be suppressed — for example during gizmo manipulation or fly mode where the camera is driven by other logic.
Sourcepub fn apply_to_camera(&self, camera: &mut Camera) -> ActionFrame
pub fn apply_to_camera(&self, camera: &mut Camera) -> ActionFrame
Resolve accumulated events, apply camera navigation, and return the
ActionFrame for this frame.
Call this in the render / update step, before begin_frame for the
next frame.
Auto Trait Implementations§
impl Freeze for OrbitCameraController
impl RefUnwindSafe for OrbitCameraController
impl Send for OrbitCameraController
impl Sync for OrbitCameraController
impl Unpin for OrbitCameraController
impl UnsafeUnpin for OrbitCameraController
impl UnwindSafe for OrbitCameraController
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§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>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§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.Source§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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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 moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.