pub struct Camera2D {
pub rotation: f32,
pub zoom: Vec2,
pub target: Vec2,
pub offset: Vec2,
pub render_target: Option<RenderTarget>,
pub viewport: Option<(i32, i32, i32, i32)>,
}
Fields§
§rotation: f32
Rotation in degrees.
zoom: Vec2
Scaling, should be (1.0, 1.0) by default.
target: Vec2
Rotation and zoom origin.
offset: Vec2
Displacement from target.
render_target: Option<RenderTarget>
If “render_target” is set - camera will render to texture.
Otherwise to the screen.
viewport: Option<(i32, i32, i32, i32)>
Part of the screen to render to.
None means the whole screen.
Viewport do not affect camera space, just the render position on the screen.
Useful for things like splitscreen.
Implementations§
source§impl Camera2D
impl Camera2D
sourcepub fn from_display_rect(rect: Rect) -> Camera2D
pub fn from_display_rect(rect: Rect) -> Camera2D
Will make camera space equals given rect.
Examples found in repository?
examples/letterbox.rs (line 14)
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
async fn main() {
// Setup 'render_target', used to hold the rendering result so we can resize it
let render_target = render_target(VIRTUAL_WIDTH as u32, VIRTUAL_HEIGHT as u32);
render_target.texture.set_filter(FilterMode::Linear);
// Setup camera for the virtual screen, that will render to 'render_target'
let mut render_target_cam =
Camera2D::from_display_rect(Rect::new(0., 0., VIRTUAL_WIDTH, VIRTUAL_HEIGHT));
render_target_cam.render_target = Some(render_target.clone());
loop {
// Get required scaling value
let scale: f32 = f32::min(
screen_width() / VIRTUAL_WIDTH,
screen_height() / VIRTUAL_HEIGHT,
);
// Mouse position in the virtual screen
let virtual_mouse_pos = Vec2 {
x: (mouse_position().0 - (screen_width() - (VIRTUAL_WIDTH * scale)) * 0.5) / scale,
y: (mouse_position().1 - (screen_height() - (VIRTUAL_HEIGHT * scale)) * 0.5) / scale,
};
// ------------------------------------------------------------------------
// Begin drawing the virtual screen to 'render_target'
// ------------------------------------------------------------------------
set_camera(&render_target_cam);
clear_background(LIGHTGRAY);
draw_text("Hello Letterbox", 20.0, 20.0, 30.0, DARKGRAY);
draw_circle(VIRTUAL_WIDTH / 2.0 - 65.0, VIRTUAL_HEIGHT / 2.0, 35.0, RED);
draw_circle(VIRTUAL_WIDTH / 2.0 + 65.0, VIRTUAL_HEIGHT / 2.0, 35.0, BLUE);
draw_circle(
VIRTUAL_WIDTH / 2.0,
VIRTUAL_HEIGHT / 2.0 - 65.0,
35.0,
YELLOW,
);
draw_circle(virtual_mouse_pos.x, virtual_mouse_pos.y, 15.0, BLACK);
// ------------------------------------------------------------------------
// Begin drawing the window screen
// ------------------------------------------------------------------------
set_default_camera();
clear_background(BLACK); // Will be the letterbox color
// Draw 'render_target' to window screen, porperly scaled and letterboxed
draw_texture_ex(
&render_target.texture,
(screen_width() - (VIRTUAL_WIDTH * scale)) * 0.5,
(screen_height() - (VIRTUAL_HEIGHT * scale)) * 0.5,
WHITE,
DrawTextureParams {
dest_size: Some(vec2(VIRTUAL_WIDTH * scale, VIRTUAL_HEIGHT * scale)),
flip_y: true, // Must flip y otherwise 'render_target' will be upside down
..Default::default()
},
);
next_frame().await;
}
}
source§impl Camera2D
impl Camera2D
sourcepub fn world_to_screen(&self, point: Vec2) -> Vec2
pub fn world_to_screen(&self, point: Vec2) -> Vec2
Returns the screen space position for a 2d camera world space position.
Screen position in window space - from (0, 0) to (screen_width, screen_height()).
sourcepub fn screen_to_world(&self, point: Vec2) -> Vec2
pub fn screen_to_world(&self, point: Vec2) -> Vec2
Returns the world space position for a 2d camera screen space position.
Point is a screen space position, often mouse x and y.
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for Camera2D
impl Send for Camera2D
impl Sync for Camera2D
impl Unpin for Camera2D
impl UnwindSafe for Camera2D
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
Mutably borrows from an owned value. Read more