【问题标题】:Different gyroscope values in chrome mobile and safari mobilechrome mobile和safari mobile中的不同陀螺仪值
【发布时间】:2014-08-28 08:32:09
【问题描述】:

我目前正在构建一个小型全景照片查看器,它可以选择使用陀螺仪导航场景。我从 deviceOrientation 事件中获取数据并将欧拉角转换为旋转矩阵,然后对其进行一些变换,最终通过 3dMatrix 变换移动 css 立方体。

我的问题是我在不同设备上的不同浏览器上从 deviceOrientation 事件中获得了非常不同的数据,我不明白为什么。

在我尝试过的几乎所有 iPhone 上,无论是 Safari 移动版还是 Chrome,一切都运行良好。价值观进来并有意义,整个体验非常无缝。

在三星 Galaxy S3 上,在 Chrome 中,我的数据完全不稳定。 alpha 值实际上似乎并不代表围绕 z 轴的旋转,并且值有巨大的飞跃,例如 beta 从 50 到 130 度的飞跃只需很小的运动。

在 Chrome 中的 Galaxy Tab S 8.4" 上,我仍然得到一些不稳定的值,有些来回颠簸,但我至少得到了一些接近所需行为的东西。

在 Nexus 7 第二代和 Chrome 上,体验是连贯且有意义的。与 iPhone 相比,它的渲染是不稳定的,但它可以正确旋转所有内容,并且这些值是有意义的。

有谁知道我可以如何解决这些问题,或者我应该如何解决这些问题?它们可能是三星 Android 端口的问题,或者是最新版本操作系统中的 Android 本身的问题。

想法?想法?建议?在这一点上我真的迷路了。

谢谢!

【问题讨论】:

    标签: javascript android html google-chrome device-orientation


    【解决方案1】:

    这里可以找到JS事件的详细信息:
    http://dorukeker.com/know-thy-gyroscope-and-js-part-i/

    以下是哪些值在哪些设备上有所不同:
    http://dorukeker.com/know-thy-gyroscope-and-js-part-ii/

    这是我准备处理这些差异的 JS 文件:
    https://github.com/dorukeker/gyronorm.js

    更新:我刚刚在 GitHub 上更新了 gyronorm.js。现在有一些函数可以告诉您设备/浏览器组合上是否有某个变量可用。查看GitHub页面下载和使用方法。

    我希望这些帮助。 享受吧!

    【讨论】:

    • 非常感谢!我会尝试将它安装到我们的应用程序中,看看效果如何。我最近有一些非常奇怪的行为,特别是安装了最新操作系统的三星设备。这些值只是不稳定的,没有意义。 alpha 保持在 259 度,围绕 z 轴转了 1/2-3/4 圈,然后向下滑动到 180 左右,然后向下滑动到 90。在值之间没有。它类似于在我安装新操作系统之前工作的东西,然后是垃圾数据。
    • 我刚刚使用带有 KitKat 4.4.2 的三星 Galaxy S5 进行了快速测试。在本机浏览器中,我看到了您提到的内容,但在 Chrome 中它按预期工作。 :( 我会更详细地研究它并尝试解决问题。如果/何时准备好,我会通知您。
    • 非常感谢多鲁克!设备之间似乎仍然存在很多不一致之处。现在,我在所有三星设备上仍然遇到问题。我的三星 s3 完全搞砸了。它会翻转和旋转,并且与实际的 alpha、beta 和 gamma 角度完全不合逻辑。 Firefox 和 Chrome 37 中的 Samsung Tab 10.1 和 Acer Iconia A1-830 根本没有从 Gyroscope API 提供任何数据。我只是得到 NULL 值。我的代码在我测试过的所有 iPhone 以及 Nexus 7 上都能完美运行。
    • 目前,我能想到的唯一解决方案是嗅探用户代理,并且只支持该功能适用​​的特定设备。我还认为这个问题与三星在其专有 Android 版本的最新版本中的陀螺仪代码有关。可能是 Google 意识到了这一点,并在问题得到解决之前关闭了他们的陀螺仪 API。
    • - 我们信任 iPhone :) 幸运的是它几乎总是按预期工作。 - 三星 S3 是相当旧的设备/操作系统,不确定他们是否按预期实施了标准。 - alpha、beta 和 gamma 角是欧拉角,它们的工作方式与围绕轴的旋转略有不同。要获得围绕轴的旋转,您需要按特定顺序应用它们,或者如果目标平台(例如 Unity3D)支持,则应用为欧拉角。在博文的第一部分中有一个来自 Mozilla 的示例。
    【解决方案2】:

    我发现(过去在使用设备方向时,不确定这是否已经改变)android 上的轴值之一与 iOS 值相反。我必须为 deviceorientation 创建一个包装器方法,该方法将反转 android 并应用一些模糊的乘数以使值具有可比性,但 android 手机之间的灵敏度会有所不同,因此您必须找到一些可接受的中间立场。

    【讨论】:

    • 谢谢!我将尝试并排比较值,看看是否可以让它更有意义。如果我有任何发现,我会报告。
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多