fixed up example to be clean, and added head space to xr input

This commit is contained in:
MalekiRe
2023-09-11 18:54:00 -07:00
parent 4da61df223
commit 4d36ddf9c4
2 changed files with 14 additions and 29 deletions

View File

@@ -1,32 +1,12 @@
use bevy::core_pipeline::core_3d; use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin};
use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; use bevy::prelude::*;
use bevy::diagnostic::{LogDiagnosticsPlugin, FrameTimeDiagnosticsPlugin}; use bevy::transform::components::Transform;
use bevy::ecs::prelude::{Bundle, Component, ReflectComponent};
use bevy::math::Mat4;
use bevy::prelude::Camera3d;
use bevy::reflect::{std_traits::ReflectDefault, Reflect};
use bevy::render::view::ColorGrading;
use bevy::render::{
camera::{Camera, CameraProjection, CameraRenderGraph},
primitives::Frustum,
view::VisibleEntities,
};
use bevy::transform::components::{GlobalTransform, Transform};
// mostly copied from https://github.com/blaind/bevy_openxr/tree/main/crates/bevy_openxr/src/render_graph/camera
use openxr::Fovf;
use bevy::render::camera::CameraProjectionPlugin;
use bevy::render::view::{update_frusta, VisibilitySystems};
use bevy::transform::TransformSystem;
use bevy::{prelude::*, render::camera::RenderTarget};
use bevy_openxr::input::XrInput; use bevy_openxr::input::XrInput;
use bevy_openxr::resources::{XrFrameState, XrSession, XrViews}; use bevy_openxr::resources::XrFrameState;
use bevy_openxr::xr_input::controllers::XrControllerType; use bevy_openxr::xr_input::controllers::XrControllerType;
use bevy_openxr::xr_input::oculus_touch::OculusController; use bevy_openxr::xr_input::oculus_touch::OculusController;
use bevy_openxr::xr_input::{OpenXrInput, QuatConv, Vec3Conv}; use bevy_openxr::xr_input::{OpenXrInput, QuatConv, Vec3Conv};
use bevy_openxr::{DefaultXrPlugins, LEFT_XR_TEXTURE_HANDLE, RIGHT_XR_TEXTURE_HANDLE}; use bevy_openxr::DefaultXrPlugins;
use openxr::ActiveActionSet;
fn main() { fn main() {
color_eyre::install().unwrap(); color_eyre::install().unwrap();
@@ -36,7 +16,7 @@ fn main() {
.add_plugins(DefaultXrPlugins) .add_plugins(DefaultXrPlugins)
.add_plugins(OpenXrInput::new(XrControllerType::OculusTouch)) .add_plugins(OpenXrInput::new(XrControllerType::OculusTouch))
.add_plugins(LogDiagnosticsPlugin::default()) .add_plugins(LogDiagnosticsPlugin::default())
.add_plugins(FrameTimeDiagnosticsPlugin::default()) .add_plugins(FrameTimeDiagnosticsPlugin)
.add_systems(Startup, setup) .add_systems(Startup, setup)
.add_systems(Update, hands) .add_systems(Update, hands)
.run(); .run();
@@ -84,17 +64,17 @@ fn hands(
frame_state: Res<XrFrameState>, frame_state: Res<XrFrameState>,
xr_input: Res<XrInput>, xr_input: Res<XrInput>,
) { ) {
let mut func = || -> anyhow::Result<()> { let mut func = || -> color_eyre::Result<()> {
let frame_state = *frame_state.lock().unwrap(); let frame_state = *frame_state.lock().unwrap();
let right_controller = oculus_controller let right_controller = oculus_controller
.grip_space .grip_space
.right .right
.relate(&**&xr_input.stage, frame_state.predicted_display_time)?; .relate(&xr_input.stage, frame_state.predicted_display_time)?;
let left_controller = oculus_controller let left_controller = oculus_controller
.grip_space .grip_space
.left .left
.relate(&**&xr_input.stage, frame_state.predicted_display_time)?; .relate(&xr_input.stage, frame_state.predicted_display_time)?;
gizmos.rect( gizmos.rect(
right_controller.0.pose.position.to_vec3(), right_controller.0.pose.position.to_vec3(),
right_controller.0.pose.orientation.to_quat(), right_controller.0.pose.orientation.to_quat(),

View File

@@ -12,6 +12,7 @@ pub struct XrInput {
//pub right_space: Arc<xr::Space>, //pub right_space: Arc<xr::Space>,
//pub left_space: Arc<xr::Space>, //pub left_space: Arc<xr::Space>,
pub stage: Arc<xr::Space>, pub stage: Arc<xr::Space>,
pub head: Arc<xr::Space>,
} }
impl XrInput { impl XrInput {
@@ -52,6 +53,9 @@ impl XrInput {
// )?; // )?;
let stage = let stage =
session.create_reference_space(xr::ReferenceSpaceType::STAGE, xr::Posef::IDENTITY)?; session.create_reference_space(xr::ReferenceSpaceType::STAGE, xr::Posef::IDENTITY)?;
let head =
session.create_reference_space(xr::ReferenceSpaceType::VIEW, xr::Posef::IDENTITY)
.unwrap();
//session.attach_action_sets(&[&action_set])?; //session.attach_action_sets(&[&action_set])?;
//session.attach_action_sets(&[])?; //session.attach_action_sets(&[])?;
Ok(Self { Ok(Self {
@@ -60,6 +64,7 @@ impl XrInput {
// right_space: Arc::new(right_space), // right_space: Arc::new(right_space),
// left_space: Arc::new(left_space), // left_space: Arc::new(left_space),
stage: Arc::new(stage), stage: Arc::new(stage),
head: Arc::new(head),
}) })
} }
} }