openvr watch

This commit is contained in:
galister
2024-01-28 22:03:25 +01:00
parent 220b87659e
commit 3b0440562a
5 changed files with 12 additions and 5 deletions

View File

@@ -304,7 +304,7 @@ where
#[cfg(debug_assertions)]
log::trace!("Hit: {} {:?}", hovered.state.name, hit);
if pointer.now.grab && !pointer.before.grab {
if pointer.now.grab && !pointer.before.grab && hovered.state.grabbable {
pointer.start_grab(hovered);
return hit.dist;
}
@@ -346,6 +346,9 @@ impl Pointer {
}
if let Some(hit) = self.ray_test(overlay.state.id, &overlay.state.transform) {
if hit.dist.is_infinite() || hit.dist.is_nan() {
continue;
}
hits.try_push(hit);
}
}

View File

@@ -48,7 +48,6 @@ impl OverlayData<OpenVrOverlayData> {
self.data.color = Vec4::ONE;
self.init(app);
self.upload_transform(overlay);
if self.data.width < f32::EPSILON {
self.data.width = 1.0;

View File

@@ -43,7 +43,7 @@ impl Default for OverlayState {
want_visible: false,
show_hide: false,
grabbable: false,
dirty: false,
dirty: true,
relative_to: RelativeTo::None,
spawn_scale: 1.0,
spawn_point: Vec3A::NEG_Z,
@@ -95,6 +95,7 @@ impl OverlayState {
self.spawn_rotation,
self.spawn_point.into(),
);
self.dirty = true;
}
}
pub fn reset(&mut self, app: &mut AppState) {

View File

@@ -1,6 +1,7 @@
use std::{sync::Arc, time::Instant};
use chrono::Local;
use glam::{vec2, Affine2};
use crate::{
backend::{
@@ -158,6 +159,8 @@ where
});
button_x += button_width;
}
let interaction_transform =
Affine2::from_translation(vec2(0.5, 0.5)) * Affine2::from_scale(vec2(1., -2.0));
let relative_to = RelativeTo::Hand(state.session.watch_hand);
@@ -169,6 +172,7 @@ where
spawn_scale: 0.065,
spawn_point: state.session.watch_pos.into(),
spawn_rotation: state.session.watch_rot,
interaction_transform,
relative_to,
..Default::default()
},

View File

@@ -11,7 +11,7 @@ use crate::{
shaders::{frag_color, frag_glyph, frag_screen, frag_sprite, frag_srgb, vert_common},
};
pub const WATCH_DEFAULT_POS: Vec3 = Vec3::new(0., 0., 0.15);
pub const WATCH_DEFAULT_POS: Vec3 = Vec3::new(0.025, 0., 0.15);
pub const WATCH_DEFAULT_ROT: Quat = Quat::from_xyzw(0.7071066, 0., 0.7071066, 0.0007963);
pub struct AppState {
@@ -127,7 +127,7 @@ impl AppSession {
screen_max_res: [2560, 1440],
capture_method: "auto".to_string(),
primary_hand: 1,
watch_hand: 1,
watch_hand: 0,
watch_pos: WATCH_DEFAULT_POS,
watch_rot: WATCH_DEFAULT_ROT,
color_norm: Vec3 {