diff --git a/crates/bevy_openxr/examples/overlay.rs b/crates/bevy_openxr/examples/overlay.rs new file mode 100644 index 0000000..589bdf1 --- /dev/null +++ b/crates/bevy_openxr/examples/overlay.rs @@ -0,0 +1,95 @@ +//! A simple 3D scene with light shining over a cube sitting on a plane. + +use bevy::prelude::*; +use bevy_openxr::{add_xr_plugins, init::OxrInitPlugin, types::OxrExtensions}; +use bevy_xr::session::XrStatus; +use openxr::EnvironmentBlendMode; +use wgpu::TextureFormat; + +fn main() { + App::new() + .add_plugins(add_xr_plugins(DefaultPlugins).build().set(OxrInitPlugin { + exts: { + let mut exts = OxrExtensions::default(); + exts.enable_hand_tracking(); + exts.other.push("XR_EXTX_overlay\0".into()); + exts + }, + // blend_modes: Some({ + // let mut v = Vec::new(); + // v.push(EnvironmentBlendMode::ALPHA_BLEND); + // v.push(EnvironmentBlendMode::ADDITIVE); + // v.push(EnvironmentBlendMode::OPAQUE); + // v + // }), + // formats: Some({ + // let mut v = Vec::new(); + // // v.push(TextureFormat::Rgba8Uint); + // v.push(TextureFormat::Rgba8Unorm); + // v.push(TextureFormat::Rgba8UnormSrgb); + // v + // }), + ..OxrInitPlugin::default() + })) + .insert_resource(ClearColor(Color::NONE)) + .add_plugins(bevy_xr_utils::hand_gizmos::HandGizmosPlugin) + .add_systems(Startup, setup) + .add_systems(Update, handle_input) + .run(); +} + +fn handle_input( + keys: Res>, + mut end: EventWriter, + mut _destroy: EventWriter, + mut _begin: EventWriter, + mut create: EventWriter, + state: Res, +) { + if keys.just_pressed(KeyCode::KeyE) { + info!("sending end"); + end.send_default(); + } + if keys.just_pressed(KeyCode::KeyC) { + info!("sending create"); + create.send_default(); + } + if keys.just_pressed(KeyCode::KeyI) { + info!("current state: {:?}", *state); + } +} + +/// set up a simple 3D scene +fn setup( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, +) { + // circular base + // commands.spawn(PbrBundle { + // mesh: meshes.add(Circle::new(4.0)), + // material: materials.add(Color::WHITE), + // transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + // ..default() + // }); + // cube + commands.spawn(PbrBundle { + mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), + material: materials.add(Color::rgb_u8(124, 144, 255)), + transform: Transform::from_xyz(0.0, 2.5, 0.0), + ..default() + }); + // light + commands.spawn(PointLightBundle { + point_light: PointLight { + shadows_enabled: true, + ..default() + }, + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..default() + }); + commands.spawn(Camera3dBundle { + transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + ..default() + }); +}