OrientationSensor - 方向传感器的基类

OrientationSensorSensor API 的接口,它是方向传感器的基类。该接口不能直接使用。它为子接口提供了基础的属性和方法。

如果功能策略禁止使用功能,那是因为您的代码与服务器上设置的策略不一致。这种情况不会显示给用户。有关实现说明,请参见 Feature-Policy

基于 OrientationSensor 的接口

以下是基于 OrientationSensor 接口的接口列表。

属性

OrientationSensor.quaternion

返回四个元素的 Array,其元素包含表示设备方向的单元四元数的分量。

方法

OrientationSensor.populateMatrix()

根据最新的传感器读数,用旋转矩阵填充给定的对象。旋转最大值显示如下。

实例

基础实例

以下实例大致基于 Intel 的 Orientation Phone 演示,以每秒 60 次的频率实例化了一个 AbsoluteOrientationSensor。每次读取时,它都会使用 OrientationSensor.quaternion 来旋转手机的视觉模型。

const options = { frequency: 60, referenceFrame: 'device' };
const sensor = new AbsoluteOrientationSensor(options);

sensor.addEventListener('reading', () => {
  // 模型是在其他地方实例化的 Three.js 对象。
  model.quaternion.fromArray(sensor.quaternion).inverse();
});
sensor.addEventListener('error', error => {
  if (event.error.name == 'NotReadableError') {
    console.log("传感器不可用。");
  }
});
sensor.start();

权限实例

使用方向传感器需要多个设备传感器的权限。因为 Permissions 使用了 Promise,所以请求权限的一种好方法是使用 Promise.all

const sensor = new AbsoluteOrientationSensor();
Promise.all([navigator.permissions.query({ name: "accelerometer" }),
             navigator.permissions.query({ name: "magnetometer" }),
             navigator.permissions.query({ name: "gyroscope" })])
       .then(results => {
         if (results.every(result => result.state === "granted")) {
           sensor.start();
           // ...
         } else {
           console.log("没有使用 AbsoluteOrientationSensor 的权限。");
         }
   });

规范

规范 状态 备注
Orientation Sensor
OrientationSensor 的定义
候选推荐 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持69 未知 未知 未知56 未知
populateMatrix69 未知 未知 未知56 未知
quaternion69 未知 未知 未知56 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持6969 未知 未知 未知48 未知
populateMatrix6969 未知 未知 未知48 未知
quaternion6969 未知 未知 未知48 未知