将外部四元数映射到 Unity
Mapping outside quaternions to Unity
我正在尝试使用四元数将传感器的旋转映射到 Unity,但我做不到
似乎弄清楚为什么旋转不能正确映射。
我正在使用 Adafruit BNO055 以四元数的形式提取绝对方向。这
可以找到其四元数实现的源代码 here。据我了解
四元数,几乎什么都不是,我应该能够从传感器中取出一个四元数,然后
将其泵入 Unity 内的任何游戏对象,以便它们共享相同的方向。如果我有一个循环
设置从传感器读取四元数数据并将其泵入Unity,GameObject应该
完全像物理世界中的传感器一样旋转。不幸的是,这并没有发生。
从传感器发送到Unity的数据示例
w: 0.903564
x: 0.012207
y: 0.009094
z: -0.428223
传感器传来的四元数和Unity中使用的四元数不一样吗?如果没有,怎么办
我会着手正确地映射这些吗?
在此先感谢您的帮助!
当我从逗号分隔列表中的外部传感器创建四元数时,这对我有用:
parts = SensorReceivedText.Split(',');
float x = Convert.ToSingle(parts[0]);
float y = Convert.ToSingle(parts[1]);
float z = Convert.ToSingle(parts[2]);
float w = Convert.ToSingle(parts[3]);
Quaternion rotation = new Quaternion(x, y, z, w);
仅作为不同转换的示例(包括 Unity 和 OpenGL)
https://developers.google.com/project-tango/overview/coordinate-systems
我不知道你的设备和坐标符号,但你可以通过一些方向实验来恢复它。
转换的主要问题,转换矩阵可能包含MIRRORING(-1矩阵分量)。并且不能仅通过重新排列旋转轴来解决。
我正在尝试使用四元数将传感器的旋转映射到 Unity,但我做不到 似乎弄清楚为什么旋转不能正确映射。
我正在使用 Adafruit BNO055 以四元数的形式提取绝对方向。这 可以找到其四元数实现的源代码 here。据我了解 四元数,几乎什么都不是,我应该能够从传感器中取出一个四元数,然后 将其泵入 Unity 内的任何游戏对象,以便它们共享相同的方向。如果我有一个循环 设置从传感器读取四元数数据并将其泵入Unity,GameObject应该 完全像物理世界中的传感器一样旋转。不幸的是,这并没有发生。
从传感器发送到Unity的数据示例
w: 0.903564
x: 0.012207
y: 0.009094
z: -0.428223
传感器传来的四元数和Unity中使用的四元数不一样吗?如果没有,怎么办 我会着手正确地映射这些吗?
在此先感谢您的帮助!
当我从逗号分隔列表中的外部传感器创建四元数时,这对我有用:
parts = SensorReceivedText.Split(',');
float x = Convert.ToSingle(parts[0]);
float y = Convert.ToSingle(parts[1]);
float z = Convert.ToSingle(parts[2]);
float w = Convert.ToSingle(parts[3]);
Quaternion rotation = new Quaternion(x, y, z, w);
仅作为不同转换的示例(包括 Unity 和 OpenGL) https://developers.google.com/project-tango/overview/coordinate-systems
我不知道你的设备和坐标符号,但你可以通过一些方向实验来恢复它。
转换的主要问题,转换矩阵可能包含MIRRORING(-1矩阵分量)。并且不能仅通过重新排列旋转轴来解决。