Skip to content

Commit 24481a7

Browse files
committed
Adjust offset logic, again.
1 parent d47d139 commit 24481a7

1 file changed

Lines changed: 13 additions & 43 deletions

File tree

src/VRDriver.cpp

Lines changed: 13 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -873,42 +873,19 @@ bool SlimeVRDriver::VRDriver::ExternalHandNearEdgeOfFov(
873873
void SlimeVRDriver::VRDriver::UpdateHandCorrectionFromPoses(
874874
bool left_hand, const vr::DriverPose_t &vd_pose,
875875
const vr::DriverPose_t &slimevr_pose) {
876-
// VD pose is in room space (from GetRawTrackedDevicePoses). SlimeVR pose is
877-
// from protobuf (GetPose()); in tracking space when universe set, else room.
878-
// Express both in room, then offset_room = VD - SlimeVR_room.
879-
float slimevr_room[3];
880-
if (current_universe_.has_value()) {
881-
TrackingToRoomPosition(current_universe_.value().second,
882-
slimevr_pose.vecPosition, slimevr_room);
883-
} else {
884-
for (int i = 0; i < 3; i++)
885-
slimevr_room[i] = static_cast<float>(slimevr_pose.vecPosition[i]);
886-
}
887-
float offset_room[3];
888-
for (int i = 0; i < 3; i++) {
889-
offset_room[i] =
890-
static_cast<float>(vd_pose.vecPosition[i]) - slimevr_room[i];
891-
if (i == 1) offset_room[i] *= config_hand_offset_height_scale_;
892-
}
876+
// No conversion: offset = VD - SlimeVR (same space as raw pose swap used).
893877
float alpha = config_hand_offset_ema_alpha_;
894878
if (left_hand) {
895879
if (!hand_offset_left_valid_) {
896880
alpha = 0.f;
897881
hand_offset_left_valid_ = true;
898882
}
899-
if (current_universe_.has_value()) {
900-
const auto &trans = current_universe_.value().second;
901-
double qw = std::cos(trans.yaw / 2.0);
902-
double qy = std::sin(trans.yaw / 2.0);
903-
float delta[3];
904-
RotateVectorByQuaternion(qw, 0.0, qy, 0.0, offset_room, delta);
905-
for (int i = 0; i < 3; i++)
906-
hand_offset_left_tracking_[i] =
907-
alpha * hand_offset_left_tracking_[i] + (1.f - alpha) * delta[i];
908-
} else {
909-
for (int i = 0; i < 3; i++)
910-
hand_offset_left_tracking_[i] =
911-
alpha * hand_offset_left_tracking_[i] + (1.f - alpha) * offset_room[i];
883+
for (int i = 0; i < 3; i++) {
884+
float delta = static_cast<float>(vd_pose.vecPosition[i]) -
885+
static_cast<float>(slimevr_pose.vecPosition[i]);
886+
if (i == 1) delta *= config_hand_offset_height_scale_;
887+
hand_offset_left_tracking_[i] =
888+
alpha * hand_offset_left_tracking_[i] + (1.f - alpha) * delta;
912889
}
913890
vr::HmdQuaternion_t new_correction =
914891
QuatMultiply(QuatConjugate(slimevr_pose.qRotation), vd_pose.qRotation);
@@ -919,19 +896,12 @@ void SlimeVRDriver::VRDriver::UpdateHandCorrectionFromPoses(
919896
alpha = 0.f;
920897
hand_offset_right_valid_ = true;
921898
}
922-
if (current_universe_.has_value()) {
923-
const auto &trans = current_universe_.value().second;
924-
double qw = std::cos(trans.yaw / 2.0);
925-
double qy = std::sin(trans.yaw / 2.0);
926-
float delta[3];
927-
RotateVectorByQuaternion(qw, 0.0, qy, 0.0, offset_room, delta);
928-
for (int i = 0; i < 3; i++)
929-
hand_offset_right_tracking_[i] =
930-
alpha * hand_offset_right_tracking_[i] + (1.f - alpha) * delta[i];
931-
} else {
932-
for (int i = 0; i < 3; i++)
933-
hand_offset_right_tracking_[i] =
934-
alpha * hand_offset_right_tracking_[i] + (1.f - alpha) * offset_room[i];
899+
for (int i = 0; i < 3; i++) {
900+
float delta = static_cast<float>(vd_pose.vecPosition[i]) -
901+
static_cast<float>(slimevr_pose.vecPosition[i]);
902+
if (i == 1) delta *= config_hand_offset_height_scale_;
903+
hand_offset_right_tracking_[i] =
904+
alpha * hand_offset_right_tracking_[i] + (1.f - alpha) * delta;
935905
}
936906
vr::HmdQuaternion_t new_correction =
937907
QuatMultiply(QuatConjugate(slimevr_pose.qRotation), vd_pose.qRotation);

0 commit comments

Comments
 (0)