GyroToUnity 四元数求导
GyroToUnity Quaternion Derivation
最近开发一个VR项目,需要用到陀螺仪,这是我在unity手册中找到的代码:
// The Gyroscope is right-handed. Unity is left handed.
// Make the necessary change to the camera.
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}
private static Quaternion GyroToUnity(Quaternion q)
{
return new Quaternion(q.x, q.y, -q.z, -q.w);
}
抱歉数学和英语不好,谁能给我一些指导来解释 GyroToUnity
函数的含义?
陀螺仪 Input.gyro.attitude
传感器值在 右手坐标 中返回,但 Unity 使用 左手坐标 系统.您可以阅读有关这两个坐标系的信息 here.
一个简单的图像来说明差异:
GyroToUnity
函数只是用来做Gyro(右手坐标)到Camera(左手坐标)的转换。看起来它正在翻转陀螺仪传感器的 up/down 和 left/right 值的方向移动。翻转后,返回新的翻转值,然后赋值给相机。
这是完成 conversion/flipping 的地方:
return new Quaternion(q.x, q.y, -q.z, -q.w);
因此 -q.z
和 -q.w
。减号用于翻转值。
如果进行转换或者不使用GyroToUnity
函数会怎样?
如果设备贴在您的脸上并且您抬起头,摄像头会向下移动,反之亦然。如果你向右移动它,相机会向左移动,反之亦然。这应该是相反的。这就是使用该功能的原因。
了解发生了什么的最简单方法是亲自尝试。绕过 GyroToUnity
函数然后测试它。你会看到不同。
void GyroModifyCamera()
{
transform.rotation = Input.gyro.attitude;
}
现在,将其与原始版本的代码进行比较:
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}
最近开发一个VR项目,需要用到陀螺仪,这是我在unity手册中找到的代码:
// The Gyroscope is right-handed. Unity is left handed.
// Make the necessary change to the camera.
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}
private static Quaternion GyroToUnity(Quaternion q)
{
return new Quaternion(q.x, q.y, -q.z, -q.w);
}
抱歉数学和英语不好,谁能给我一些指导来解释 GyroToUnity
函数的含义?
陀螺仪 Input.gyro.attitude
传感器值在 右手坐标 中返回,但 Unity 使用 左手坐标 系统.您可以阅读有关这两个坐标系的信息 here.
一个简单的图像来说明差异:
GyroToUnity
函数只是用来做Gyro(右手坐标)到Camera(左手坐标)的转换。看起来它正在翻转陀螺仪传感器的 up/down 和 left/right 值的方向移动。翻转后,返回新的翻转值,然后赋值给相机。
这是完成 conversion/flipping 的地方:
return new Quaternion(q.x, q.y, -q.z, -q.w);
因此 -q.z
和 -q.w
。减号用于翻转值。
如果进行转换或者不使用GyroToUnity
函数会怎样?
如果设备贴在您的脸上并且您抬起头,摄像头会向下移动,反之亦然。如果你向右移动它,相机会向左移动,反之亦然。这应该是相反的。这就是使用该功能的原因。
了解发生了什么的最简单方法是亲自尝试。绕过 GyroToUnity
函数然后测试它。你会看到不同。
void GyroModifyCamera()
{
transform.rotation = Input.gyro.attitude;
}
现在,将其与原始版本的代码进行比较:
void GyroModifyCamera()
{
transform.rotation = GyroToUnity(Input.gyro.attitude);
}