fixed up example to be clean, and added head space to xr input
This commit is contained in:
@@ -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(),
|
||||||
|
|||||||
@@ -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),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user