fix openvr lines

This commit is contained in:
galister
2026-01-15 14:32:21 +09:00
parent cd0d49eaf6
commit 6ab1db9a76
2 changed files with 14 additions and 6 deletions

View File

@@ -123,7 +123,8 @@ impl LinePool {
let center = (start + end) * 0.5; let center = (start + end) * 0.5;
let dir_norm = dir / len; let dir_norm = dir / len;
let xform = Affine3A::from_rotation_translation( let xform = Affine3A::from_scale_rotation_translation(
Vec3::new(1., len / 0.002, 1.),
Quat::from_rotation_arc(Vec3::Z, dir_norm.into()), Quat::from_rotation_arc(Vec3::Z, dir_norm.into()),
center.into(), center.into(),
); );
@@ -133,11 +134,10 @@ impl LinePool {
let to_hmd = hmd.translation - center; let to_hmd = hmd.translation - center;
let sides = [Vec3A::Z, Vec3A::X, Vec3A::NEG_Z, Vec3A::NEG_X]; let sides = [Vec3A::Z, Vec3A::X, Vec3A::NEG_Z, Vec3A::NEG_X];
#[allow(clippy::neg_multiply)]
let rotations = [ let rotations = [
Affine3A::IDENTITY, Affine3A::IDENTITY,
Affine3A::from_axis_angle(Vec3::Y, PI * 0.5), Affine3A::from_axis_angle(Vec3::Y, PI * 0.5),
Affine3A::from_axis_angle(Vec3::Y, PI * -1.0), Affine3A::from_axis_angle(Vec3::Y, PI * 1.0),
Affine3A::from_axis_angle(Vec3::Y, PI * 1.5), Affine3A::from_axis_angle(Vec3::Y, PI * 1.5),
]; ];
@@ -151,7 +151,6 @@ impl LinePool {
transform *= rotations[closest.0]; transform *= rotations[closest.0];
debug_assert!(color < self.colors.len());
self.draw_transform(id, transform, self.colors[color]); self.draw_transform(id, transform, self.colors[color]);
} }
@@ -175,7 +174,7 @@ impl LinePool {
for data in self.lines.values_mut() { for data in self.lines.values_mut() {
data.after_input(overlay, app)?; data.after_input(overlay, app)?;
let state = data.config.active_state.as_mut().unwrap(); let state = data.config.active_state.as_mut().unwrap();
if state.alpha > 0.01 { if state.alpha > 0.05 {
if data.config.dirty { if data.config.dirty {
data.upload_texture(overlay, &app.gfx); data.upload_texture(overlay, &app.gfx);
data.config.dirty = false; data.config.dirty = false;
@@ -193,6 +192,13 @@ impl LinePool {
data.config.dirty = true; data.config.dirty = true;
} }
} }
pub fn reset(&mut self) {
for data in self.lines.values_mut() {
let state = data.config.active_state.as_mut().unwrap();
state.alpha = 0.0;
}
}
} }
struct LineBackend { struct LineBackend {

View File

@@ -340,6 +340,8 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr
.values_mut() .values_mut()
.for_each(|o| o.after_render(universe.clone(), &mut overlay_mgr, &app.gfx)); .for_each(|o| o.after_render(universe.clone(), &mut overlay_mgr, &app.gfx));
lines.reset();
// chaperone // chaperone
} // main_loop } // main_loop
@@ -353,7 +355,7 @@ pub fn openvr_run(show_by_default: bool, headless: bool) -> Result<(), BackendEr
} }
log::warn!("OpenVR shutdown"); log::warn!("OpenVR shutdown");
// context.shutdown() called by Drop unsafe { context.shutdown() };
Ok(()) Ok(())
} }