相关疑难解决方法(0)

Android getOrientation()方法返回错误的结果

我正在创建3D Compass应用程序.

我正在使用getOrientation方法来获取方向(几乎与此处相同的实现).如果我把电话放在桌子上它运作良好,但当电话顶部指向天空(减去图片上的Z轴;球体是地球)时,getOrientation开始给出非常糟糕的结果.它为Z轴提供了几个真实度数的0到180度之间的值.有什么方法可以抑制这种行为吗?我创建了一个描述问题的小视频(抱歉质量不好).提前致谢.

在此输入图像描述

解决方案:旋转模型时,有以下区别:

gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL
gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH


gl.glRotatef(_angleX, 1f, 0f, 0f); //ELEVATION
gl.glRotatef(_angleY, 0f, 1f, 0f); //ROLL
gl.glRotatef(_angleZ, 0f, 0f, 1f); //AZIMUTH
Run Code Online (Sandbox Code Playgroud)

java android orientation

10
推荐指数
1
解决办法
9718
查看次数

需要从Sensor.TYPE_ORIENTATION数据计算旋转矢量

我需要从Sensor.TYPE_ORIENTATION获得的数据中计算出一个旋转矢量.

传感器数据定义如下:

  • 必须重新计算这些值才能成为正确的3d位置:值[0]:方位角,磁北方向和Y轴之间的角度,绕Z轴(0到359).0 =北,90 =东,180 =南,270 =西
  • 1:俯仰,绕X轴旋转(-180到180),当z轴向y轴移动时为正值.
  • 值[2]:滚动,绕Y轴旋转(-90到90),当x轴远离z轴时带正值

我需要所有三个值,如Z轴值(从0到360度).我尝试了很多,但无法弄清楚如何做到这一点:/

(编辑:要查看工作代码背后的想法,请查看DroidAR框架ActionWithSensorProcessing类,您可以看到如何处理不同的事件类型.)

我还尝试使用Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD来自行计算这个3d矢量.这是代码:

final float[] inR = new float[16];
// load inR matrix from current sensor data:
SensorManager.getRotationMatrix(inR, null, gravityValues, geomagneticValues);
float[] orientation = new float[3];
SensorManager.getOrientation(inR, orientation);
mapMagAndAcclDataToVector(orientation); //here i do some *360 stuff
orientetionChanged(orientation); //then the correct values are passed (in theorie)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我认为这很复杂.所以我打赌有一个简单的解决方案,如何重新计算ensor.TYPE_ORIENTATION的值,使它们成为一个3d旋转矢量,但我只是不知道该怎么做.如果你知道答案,请告诉我.

编辑:我应该添加,我想将值传递给OpenGL,使其与轴对齐,如下所示:

gl.glRotatef(values[1], 1, 0, 0);
gl.glRotatef(values[2], 0, 1, 0);
gl.glRotatef(values[0], 0, 0, 1);
Run Code Online (Sandbox Code Playgroud)

但由于奇怪的价值范围,我显然无法做到这一点.与SensorManager.getOrientation中的值相同的问题,因为当您通过水平线时它们也会翻转.

另一个解决方案是使用inR矩阵计算角度,但我认为必须有一个更简单的解决方案(?)

android opengl-es vector matrix sensor

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

android ×2

java ×1

matrix ×1

opengl-es ×1

orientation ×1

sensor ×1

vector ×1