我正在使用THREE.js并创建一个Web应用程序,用户可以在其中旋转设备,场景也将随之移动。与此类似。
我在区分具有陀螺仪的设备和没有陀螺仪的设备时遇到问题。
根本没有方向传感器的检测设备很容易。DeviceOrientationEvent的所有alpha,beta,gamma值均为空。但是,如果移动设备没有陀螺仪,它仍会在DeviceOrientationEvent中提供alpha,beta和gamma值。问题在于这些值非常嘈杂,并在场景中引起很多震动。因此,我想禁用这些设备的设备方向。但是,到目前为止,我还无法找到如何确定数据是来自陀螺仪还是加速度计(这是我对数据的来源的猜测)。
我不知道它是否有帮助,但是在这里可以看到一个很好的例子。(按底部的类似图标的轴;您必须在没有陀螺仪和陀螺仪的设备上看到它,才能看到两者之间的区别)。他们为没有陀螺仪的设备所做的只是更新音调和滚动。当您旋转手机时,偏航不会更新。
因此,这绝对有可能,但经过大量搜索后,我还没有发现如何。如果有人可以帮助,那就太好了。
非常感谢。
在刚刚有一个加速度计,类似的设备MOTOé,所有值都为空- DeviceOrientationEvent和rotationRate -与唯一的例外accelerationIncludingGravity。但是,我之前测试过的设备没有陀螺仪,但仍为DeviceOrientationEvent提供了alpha,beta和gamma值,根据GSM Arena上的“传感器”详细信息,它似乎有2个加速度计。这就是我怀疑它能够提供DeviceOrientationEvent数据的方式,尽管嘈杂。看起来2个加速度计不足以提供旋转速度;)
如果要检查是否存在陀螺仪,请检查仅陀螺仪可以测量的参数。例如,旋转速度只是陀螺仪测量的。
看一下示例代码,该代码说明是否存在陀螺仪:
var gyroPresent = false;
window.addEventListener("devicemotion", function(event){
if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
gyroPresent = true;
});
希望这可以帮助!
只需注意一点:在这里,使用DeviceMotionEvent是因为只能从此事件中访问rotationRate(和加速度等)。OP仅尝试了DeviceOrientationEvent,因此值得一提。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句