我正在使用 ViroReact lib 开发一个 PoC,但我正在获取相机旋转的战略值。
环境:
- 设备:Android 10。小米米 9
- ViroReact 2.20.2
当ViroARScene.getCameraOrientationAsync()
我在 y 轴上旋转设备时,在旋转数组中返回意外值,试图保持 x 和 z 轴固定。
具体来说,当 y 轴达到 -90º 时,x/z 值变为 +/180º,并且从这一点开始,y 轴值接近 0,例如,y 轴值不是 -135º,而是 - 45,x/z 值为 +/-180。换句话说,y 轴值永远不会返回超过 90 的绝对值。
一些示例(值的误差范围约为 6 度):
- 预期旋转:[0, -90, 0]。返回旋转:[+/-180, -90, +/-180]
- 预期旋转:[0, -135, 0]。返回旋转:[+/-180, -45, +/-180]
- 预期旋转:[0, -180, 0]。返回旋转:[+/-180, 0, +/-180]
问题:
- 为什么y轴的绝对值永远不会大于90?
- 如果我只是在 y 轴上旋转设备,为什么当我到达某个点(y 轴上的 +/-90º)时 x/z 值会变为 +/-180º。
- 这是加速行为吗?如果是这样,任何人都可以解释这些值(请)。
检索值的代码:
<ViroARScene onTrackingUpdated={this._onInitialized} anchorDetectionTypes={"PlanesVertical"}>
...
</ViroARScene>
_onInitialized(state, reason) {
if (state === ViroConstants.TRACKING_NORMAL && reason === ViroConstants.TRACKING_REASON_NONE) {
console.log('Tracking initiated');
this._scene.getCameraOrientationAsync().then(
(orientation) => {
console.log('Cam rot:', round(orientation.rotation));
});
}
}
我还创建了一个带有一些模型的 GitHub 问题,以显示预期和返回的旋转值:https ://github.com/ViroCommunity/viro/issues/13