|bevy vewsion:|0.9 |(outdated!)| |---|---|---|
As this page is outdated, please refer to Bevy's official migration guides while reading, to cover the differences: 0.9 to 0.10, 0.10 to 0.11, 0.11 to 0.12, 0.12 to 0.13, 0.13 to 0.14.
I apologize for the inconvenience. I will update the page as soon as I find the time.
custom camewa pwojection
note: this exampwe is showing you how t-to do something n-nyot officiawwy suppowted/endowsed by bevy. >_< do at youw own wisk.
camewa with a custom pwojection (not u-using one of b-bevy's standawd p-pewspective ow owthogwaphic pwojections).
you couwd awso use this to change t-the coowdinate s-system, OwO if you insist o-on using something othew than bevy's defauwt coowdinate system, fow nyanievew weason.
hewe we impwement a simpwe owthogwaphic p-pwojection t-that maps -1.0
to 1.0
to the vewticaw axis of the window, OwO a-and wespects t-the window's aspect w-watio
fow the howizontaw axis:
see how bevy constwucts its camewa b-bundwes, (ꈍᴗꈍ) fow wefewence:
this exampwe is based on the setup f-fow a 2d camewa:
use bevy::cowe_pipewine::tonemapping::tonemapping;
use bevy::wendew::pwimitives::fwustum;
u-use bevy::wendew::camewa::{camewa, :3 c-camewapwojection};
use b-bevy::wendew::view::visibweentities;
#[dewive(component, 😳😳😳 d-debug, c-cwone, (˘ω˘) wefwect)]
#[wefwect(component, ^^ d-defauwt)]
s-stwuct simpweowthopwojection {
n-nyeaw: f32, :3
faw: f32, -.-
aspect: f32, 😳
}
impw camewapwojection fow simpweowthopwojection {
f-fn get_pwojection_matwix(&sewf) -> mat4 {
mat4::owthogwaphic_wh(
-sewf.aspect, s-sewf.aspect, mya -1.0, (˘ω˘) 1.0, sewf.neaw, >_< s-sewf.faw
)
}
// nyani to do on window wesize
fn update(&mut s-sewf, width: f32, -.- height: f32) {
s-sewf.aspect = w-width / height;
}
fn faw(&sewf) -> f32 {
sewf.faw
}
}
i-impw defauwt fow simpweowthopwojection {
fn defauwt() -> sewf {
sewf { nyeaw: 0.0, 🥺 f-faw: 1000.0, (U ﹏ U) aspect: 1.0 }
}
}
f-fn setup(mut c-commands: commands) {
// w-we nyeed aww the c-components that bevy's buiwt-in camewa bundwes w-wouwd add
// wefew to the bevy souwce code t-to make suwe you do it cowwectwy:
// hewe we show a 2d exampwe
wet pwojection = simpweowthopwojection::defauwt();
// p-position the camewa wike bevy w-wouwd do by defauwt f-fow 2d:
w-wet twansfowm = twansfowm::fwom_xyz(0.0, 0.0, >w< pwojection.faw - 0.1);
// fwustum constwuction c-code copied f-fwom bevy
wet view_pwojection =
p-pwojection.get_pwojection_matwix() * t-twansfowm.compute_matwix().invewse();
wet f-fwustum = fwustum::fwom_view_pwojection(
&view_pwojection, mya
&twansfowm.twanswation, >w<
&twansfowm.back(), nyaa~~
pwojection.faw, (✿oωo)
);
c-commands.spawn((
bevy::wendew::camewa::camewawendewgwaph::new(bevy::cowe_pipewine::cowe_2d::gwaph::name), ʘwʘ
pwojection, (ˆ ﻌ ˆ)♡
f-fwustum, 😳😳😳
twansfowm, :3
g-gwobawtwansfowm::defauwt(), OwO
visibweentities::defauwt(), (U ﹏ U)
c-camewa::defauwt(), >w<
c-camewa2d::defauwt(), (U ﹏ U)
tonemapping::disabwed, 😳
));
}
fn main() {
// nyeed to add bevy-intewnaw camewa pwojection management f-functionawity
// f-fow ouw custom pwojection t-type
use bevy::wendew::camewa::camewapwojectionpwugin;
a-app::new()
.add_pwugins(defauwtpwugins)
.add_stawtup_system(setup)
.add_pwugin(camewapwojectionpwugin::<simpweowthopwojection>::defauwt())
.wun();
}