pub struct OrthographicProjection {
pub near: f32,
pub far: f32,
pub viewport_origin: Vec2,
pub scaling_mode: ScalingMode,
pub scale: f32,
pub area: Rect,
}
Expand description
Project a 3D space onto a 2D surface using parallel lines, i.e., unlike PerspectiveProjection
,
the size of objects remains the same regardless of their distance to the camera.
The volume contained in the projection is called the view frustum. Since the viewport is rectangular and projection lines are parallel, the view frustum takes the shape of a cuboid.
Note that the scale of the projection and the apparent size of objects are inversely proportional. As the size of the projection increases, the size of objects decreases.
§Examples
Configure the orthographic projection to one world unit per 100 window pixels:
let projection = Projection::Orthographic(OrthographicProjection {
scaling_mode: ScalingMode::WindowSize,
scale: 0.01,
..OrthographicProjection::default_2d()
});
Fields§
§near: f32
The distance of the near clipping plane in world units.
Objects closer than this will not be rendered.
Defaults to 0.0
far: f32
The distance of the far clipping plane in world units.
Objects further than this will not be rendered.
Defaults to 1000.0
viewport_origin: Vec2
Specifies the origin of the viewport as a normalized position from 0 to 1, where (0, 0) is the bottom left and (1, 1) is the top right. This determines where the camera’s position sits inside the viewport.
When the projection scales due to viewport resizing, the position of the camera, and thereby viewport_origin
,
remains at the same relative point.
Consequently, this is pivot point when scaling. With a bottom left pivot, the projection will expand upwards and to the right. With a top right pivot, the projection will expand downwards and to the left. Values in between will caused the projection to scale proportionally on each axis.
Defaults to (0.5, 0.5)
, which makes scaling affect opposite sides equally, keeping the center
point of the viewport centered.
scaling_mode: ScalingMode
How the projection will scale to the viewport.
Defaults to ScalingMode::WindowSize
,
and works in concert with OrthographicProjection::scale
to determine the final effect.
For simplicity, zooming should be done by changing OrthographicProjection::scale
,
rather than changing the parameters of the scaling mode.
scale: f32
Scales the projection.
As scale increases, the apparent size of objects decreases, and vice versa.
Note: scaling can be set by scaling_mode
as well.
This parameter scales on top of that.
This property is particularly useful in implementing zoom functionality.
Defaults to 1.0
, which under standard settings corresponds to a 1:1 mapping of world units to rendered pixels.
See ScalingMode::WindowSize
for more information.
area: Rect
The area that the projection covers relative to viewport_origin
.
Bevy’s camera_system
automatically
updates this value when the viewport is resized depending on OrthographicProjection
’s other fields.
In this case, area
should not be manually modified.
It may be necessary to set this manually for shadow projections and such.
Implementations§
Source§impl OrthographicProjection
impl OrthographicProjection
Sourcepub fn default_2d() -> Self
pub fn default_2d() -> Self
Returns the default orthographic projection for a 2D context.
The near plane is set to a negative value so that the camera can still render the scene when using positive z coordinates to order foreground elements.
Sourcepub fn default_3d() -> Self
pub fn default_3d() -> Self
Returns the default orthographic projection for a 3D context.
The near plane is set to 0.0 so that the camera doesn’t render objects that are behind it.
Trait Implementations§
Source§impl CameraProjection for OrthographicProjection
impl CameraProjection for OrthographicProjection
fn get_clip_from_view(&self) -> Mat4
fn get_clip_from_view_for_sub(&self, sub_view: &SubCameraView) -> Mat4
fn update(&mut self, width: f32, height: f32)
fn far(&self) -> f32
fn get_frustum_corners(&self, z_near: f32, z_far: f32) -> [Vec3A; 8]
Source§fn compute_frustum(&self, camera_transform: &GlobalTransform) -> Frustum
fn compute_frustum(&self, camera_transform: &GlobalTransform) -> Frustum
Source§impl Clone for OrthographicProjection
impl Clone for OrthographicProjection
Source§fn clone(&self) -> OrthographicProjection
fn clone(&self) -> OrthographicProjection
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Component for OrthographicProjection
impl Component for OrthographicProjection
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§fn register_required_components(
requiree: ComponentId,
components: &mut Components,
storages: &mut Storages,
required_components: &mut RequiredComponents,
inheritance_depth: u16,
)
fn register_required_components( requiree: ComponentId, components: &mut Components, storages: &mut Storages, required_components: &mut RequiredComponents, inheritance_depth: u16, )
Source§fn register_component_hooks(hooks: &mut ComponentHooks)
fn register_component_hooks(hooks: &mut ComponentHooks)
ComponentHooks
.Source§impl Debug for OrthographicProjection
impl Debug for OrthographicProjection
Source§impl From<OrthographicProjection> for Projection
impl From<OrthographicProjection> for Projection
Source§fn from(value: OrthographicProjection) -> Self
fn from(value: OrthographicProjection) -> Self
Source§impl FromReflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl FromReflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl FromWorld for OrthographicProjection
impl FromWorld for OrthographicProjection
Source§fn from_world(_world: &mut World) -> Self
fn from_world(_world: &mut World) -> Self
Self
using data from the given World
.Source§impl GetTypeRegistration for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl GetTypeRegistration for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl PartialReflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl PartialReflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
Reflect
trait object. Read moreSource§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Reflect for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl Struct for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Struct for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&dyn PartialReflect>
fn field(&self, name: &str) -> Option<&dyn PartialReflect>
name
as a &dyn PartialReflect
.Source§fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn PartialReflect>
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
fn field_at(&self, index: usize) -> Option<&dyn PartialReflect>
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None
if TypeInfo
is not available.Source§impl TypePath for OrthographicProjection
impl TypePath for OrthographicProjection
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl Typed for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Typed for OrthographicProjectionwhere
OrthographicProjection: Any + Send + Sync,
f32: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Vec2: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
ScalingMode: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Rect: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Auto Trait Implementations§
impl Freeze for OrthographicProjection
impl RefUnwindSafe for OrthographicProjection
impl Send for OrthographicProjection
impl Sync for OrthographicProjection
impl Unpin for OrthographicProjection
impl UnwindSafe for OrthographicProjection
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
Source§fn register_required_components(
components: &mut Components,
storages: &mut Storages,
required_components: &mut RequiredComponents,
)
fn register_required_components( components: &mut Components, storages: &mut Storages, required_components: &mut RequiredComponents, )
Bundle
.Source§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
. Box<dyn Any>
can
then be further downcast
into Box<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>
. Rc<Any>
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> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§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 more