mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-06 02:01:58 +02:00
Fix OSCTrackers yawAlign (#818)
This commit is contained in:
@@ -428,29 +428,25 @@ class VRCOSCHandler(
|
||||
/**
|
||||
* Sends the expected HMD rotation upon reset to align the trackers in VRC
|
||||
*/
|
||||
fun yawAlign() {
|
||||
fun yawAlign(headRot: Quaternion) {
|
||||
if (oscSender != null && oscSender!!.isConnected) {
|
||||
for (shareableTracker in computedTrackers) {
|
||||
if (shareableTracker.trackerPosition === TrackerPosition.HEAD) {
|
||||
val (_, _, y) = shareableTracker.getRotation().toEulerAngles(EulerOrder.XYZ)
|
||||
oscArgs.clear()
|
||||
oscArgs.add(0f)
|
||||
oscArgs.add(-y * FastMath.RAD_TO_DEG)
|
||||
oscArgs.add(0f)
|
||||
oscMessage = OSCMessage(
|
||||
"/tracking/trackers/head/rotation",
|
||||
oscArgs
|
||||
)
|
||||
try {
|
||||
oscSender!!.send(oscMessage)
|
||||
} catch (e: IOException) {
|
||||
LogManager
|
||||
.warning("[VRCOSCHandler] Error sending OSC message to VRChat: $e")
|
||||
} catch (e: OSCSerializeException) {
|
||||
LogManager
|
||||
.warning("[VRCOSCHandler] Error sending OSC message to VRChat: $e")
|
||||
}
|
||||
}
|
||||
val (_, _, y, _) = headRot.toEulerAngles(EulerOrder.YXZ)
|
||||
oscArgs.clear()
|
||||
oscArgs.add(0f)
|
||||
oscArgs.add(-y * FastMath.RAD_TO_DEG)
|
||||
oscArgs.add(0f)
|
||||
oscMessage = OSCMessage(
|
||||
"/tracking/trackers/head/rotation",
|
||||
oscArgs
|
||||
)
|
||||
try {
|
||||
oscSender!!.send(oscMessage)
|
||||
} catch (e: IOException) {
|
||||
LogManager
|
||||
.warning("[VRCOSCHandler] Error sending OSC message to VRChat: $e")
|
||||
} catch (e: OSCSerializeException) {
|
||||
LogManager
|
||||
.warning("[VRCOSCHandler] Error sending OSC message to VRChat: $e")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -648,7 +648,17 @@ public class HumanPoseManager {
|
||||
if (isSkeletonPresent()) {
|
||||
skeleton.resetTrackersFull(resetSourceName);
|
||||
if (server != null) {
|
||||
server.vrcOSCHandler.yawAlign();
|
||||
if (skeleton.headTracker == null && skeleton.neckTracker == null) {
|
||||
server.vrcOSCHandler.yawAlign(Quaternion.Companion.getIDENTITY());
|
||||
} else {
|
||||
server.vrcOSCHandler
|
||||
.yawAlign(
|
||||
getRootNode()
|
||||
.getLocalTransform()
|
||||
.getRotation()
|
||||
.project(Vector3.Companion.getPOS_Y())
|
||||
);
|
||||
}
|
||||
server
|
||||
.getVMCHandler()
|
||||
.alignVMCTracking(getRootNode().getWorldTransform().getRotation());
|
||||
@@ -661,7 +671,17 @@ public class HumanPoseManager {
|
||||
if (isSkeletonPresent()) {
|
||||
skeleton.resetTrackersYaw(resetSourceName);
|
||||
if (server != null) {
|
||||
server.vrcOSCHandler.yawAlign();
|
||||
if (skeleton.headTracker == null && skeleton.neckTracker == null) {
|
||||
server.vrcOSCHandler.yawAlign(Quaternion.Companion.getIDENTITY());
|
||||
} else {
|
||||
server.vrcOSCHandler
|
||||
.yawAlign(
|
||||
getRootNode()
|
||||
.getLocalTransform()
|
||||
.getRotation()
|
||||
.project(Vector3.Companion.getPOS_Y())
|
||||
);
|
||||
}
|
||||
server
|
||||
.getVMCHandler()
|
||||
.alignVMCTracking(getRootNode().getWorldTransform().getRotation());
|
||||
|
||||
@@ -87,8 +87,8 @@ public class HumanSkeleton {
|
||||
0
|
||||
).toQuaternion();
|
||||
// #region Tracker Input
|
||||
protected Tracker headTracker;
|
||||
protected Tracker neckTracker;
|
||||
public Tracker headTracker;
|
||||
public Tracker neckTracker;
|
||||
protected Tracker upperChestTracker;
|
||||
protected Tracker chestTracker;
|
||||
protected Tracker waistTracker;
|
||||
|
||||
Reference in New Issue
Block a user