彻底修复欧拉角万向锁问题

修改欧拉角为四元数,彻底修复欧拉角在某些角度方向无法达到的问题
main
SuGar-456 2 weeks ago
parent 67ab851411
commit 99fc71988d
  1. 23
      Assets/HandDriver/Scripts/HandDriver.cs

@ -2,7 +2,7 @@ using NaughtyAttributes;
using System.Collections.Generic;
using TouchSocket.Core;
using UnityEngine;
//IMU UNITY统一位姿版 2025/12/15 4574验证
//IMU UNITY彻底修复版 2026/3/3更新
public class HandDriver : MonoBehaviour
{
@ -448,26 +448,15 @@ public class HandDriver : MonoBehaviour
}
}
private Quaternion ConvertQuaternion(Quaternion quat, bool isRightHand)
private Quaternion ConvertQuaternion(Quaternion q, bool isRightHand)
{
Quaternion q = new Quaternion(quat.x, quat.y, quat.z, quat.w);
Vector3 e = q.eulerAngles;
// Euler(z, -x, y)
Quaternion result = Quaternion.Euler(e.z, -e.x, e.y);
// IMU→Unity 坐标轴映射,直接重映射四元数分量
// 左手: IMU(X,Y,Z) → Unity(-Y, Z, X) 右手: IMU(X,Y,Z) → Unity(-Y, -Z, -X)
if (isRightHand)
{
result = Quaternion.Euler(-e.z , -e.x , -e.y );
return new Quaternion(-q.z, -q.x, -q.y, q.w);
}
return result;
/*
Quaternion quat_r = new Quaternion(quat.x, quat.y, quat.z, quat.w);
quat_r = Quaternion.Euler(quat_r.eulerAngles.z, -quat_r.eulerAngles.x, quat_r.eulerAngles.y);
return quat_r;
*/
return new Quaternion(q.z, -q.x, q.y, q.w);
}
private void UpdateThumb()

Loading…
Cancel
Save