iOS Motion 与 Android Sensor 四元数数据

问题描述

目标很简单:使用我的设备控制游戏中的 3d 游戏对象(旋转)。

在 iOS 设备中,我使用 CMDeviceMotion 来完成这项工作,代码很简单:

quaternionX = motion.attitude.quaternion.x;
quaternionY = motion.attitude.quaternion.y;
quaternionZ = motion.attitude.quaternion.z;
quaternionW = motion.attitude.quaternion.w;

在我的游戏中,我使用上面的 quaternion 数据将其转换为游戏中的旋转数据,一切正常。


在安卓中,代码是:

if (type == Sensor.TYPE_ROTATION_VECTOR) {
    float[] temporaryQuaternion = new float[4];
    SensorManager.getQuaternionFromVector(temporaryQuaternion,sensorEvent.values);
    quaternionX = temporaryQuaternion[0];
    quaternionY = temporaryQuaternion[1];
    quaternionZ = temporaryQuaternion[2];
    quaternionW = temporaryQuaternion[3];
}

但是这一次,当我尝试使用从 quaternion 获得的 SensorManager 时,结果在我的游戏中并不正确。

我需要一些关于如何像从 iOS 设备一样从 Android 设备获取 quaternion 数据的建议,以便我可以在游戏中以相同的方式使用它们。

任何建议将不胜感激,谢谢:)


更新:

iOS 设备的正确保护套(设备放在桌子上)

输出数据(x,y,z,w):

0.0006159197655506432 -0.0028661845717579126 -0.00002693507121875882 0.9999957084655762
0.0006073189433664083 -0.0028192626778036356 -0.00004078780330019072 0.9999958872795105
0.0005894795176573098 -0.002804218325763941 -0.00004623963832273148 0.9999958872795105
0.0005597725394181907 -0.0028200845699757338 -0.00009185218368656933 0.9999958872795105
0.000527433876413852 -0.002837945008650422 -0.00010885162919294089 0.9999958872795105
0.0005262080230750144 -0.0028331447392702103 -0.0000935369316721335 0.9999958872795105

Android 设备的错误案例(放在桌子上的方式相同)

-0.001673000049777329 -0.008166000247001648 0.974636971950531 0.22363300621509552
-0.0017000000225380063 -0.00812199991196394 0.9747239947319031 0.22325499355793
-0.001610000035725534 -0.008205000311136246 0.9744099974632263 0.22461800277233124
-0.0016240000259131193 -0.008062999695539474 0.9743139743804932 0.22504200041294098
-0.001627999939955771 -0.007942999713122845 0.9744499921798706 0.22445599734783173
-0.0013859999598935246 -0.007899999618530273 0.9747129678726196 0.22331200540065765
-0.0011889999732375145 -0.007706999778747559 0.9745630025863647 0.22397400438785553

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)