use bevy::asset::RenderAssetUsages;
use bevy::core_pipeline::bloom::{Bloom, BloomPrefilter};
use bevy::prelude::*;
use bevy::render::storage::ShaderStorageBuffer;
use bevy_flycam::prelude::*;
use bevy_shaders::prelude::*;
fn main() {
App::new()
.add_plugins((DefaultPlugins, ShadersPlugin))
.add_plugins(NoCameraPlayerPlugin)
.add_systems(Startup, spawn)
.run();
}
fn spawn(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<TextMaterial>>,
mut buffers: ResMut<Assets<ShaderStorageBuffer>>,
) {
const BUFFER_SIZE: usize = 4; let mut buffer = ShaderStorageBuffer::with_size(BUFFER_SIZE, RenderAssetUsages::default());
buffer.set_data(TextData::<BUFFER_SIZE>::new("37°C")); let material = TextMaterial::new(buffers.add(buffer))
.width(250.0) .height(90.0) .char_width(50.0) .char_height(70.0) .gap(10.0) .margin(10.0) .emission(3.0);
commands.spawn((
Transform::default(),
Mesh3d(meshes.add(Plane3d::new(Vec3::Z, Vec2::new(3.0, 1.0)))),
MeshMaterial3d(materials.add(material)), ));
commands.spawn((
Camera3d::default(),
Camera {
hdr: true, ..default()
},
Transform::from_xyz(10.0, 1.0, 10.0).looking_at(Vec3::ZERO, Vec3::Y),
Bloom {
intensity: 0.6,
low_frequency_boost: 0.8,
low_frequency_boost_curvature: 0.9,
high_pass_frequency: 0.7,
prefilter: BloomPrefilter {
threshold: 0.2,
threshold_softness: 0.1,
},
..Bloom::NATURAL
},
FlyCam,
));
}