3

我想为我的 GLES 相机使用 Android 方向传感器数据 - 给它旋转矩阵。我在这里找到了一个很好的例子:

如何结合 OpenGL 使用 onSensorChanged 传感器数据

但这仅适用于 GL1.0,我需要为 GLES2.0 工作。使用我自己的着色器,一切正常,手动移动相机很好。但是当我像示例中那样使用旋转矩阵时,它并没有真正起作用。

我生成旋转矩阵:

SensorManager.getRotationMatrix(rotationMatrix, null, bufferedAccelGData, bufferedMagnetData);

我的应用程序在 LANDSCAPe 中运行,因此我在之后使用该方法(如示例代码中所示):

float[] result = new float[16];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, result);
return result;

在他的代码中,它在我的手机上运行良好,但在我的手机上却不行。我的屏幕是这样的:

在此处输入图像描述

旋转矩阵似乎向右旋转了 90°(几乎就像我忘记为我的活动切换到横向一样)。

我正在考虑remap()以错误的方式使用该方法,但在示例中它是有道理的,相机移动现在有效。如果我向左旋转,屏幕也会向左旋转,尽管由于一切都转动了,它会“向上”旋转(与地面相比,地面不在底部而是在右侧)。看起来我做了一面墙而不是地面,但我确信我的坐标适合顶点。

我看了一下 draw 方法,GLSurface我看不出我在这里做错了什么:

GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
MatrixStack.glLoadMatrix(sensorManager.getRotationMatrix());  // Schreibt die MVMatrix mit der ogn. Rotationsmatrix
GameRenderer.setPerspMatrix(); // Schreibt die Perspektivmatrix Uniform für GLES. Daran sollte es nicht liegen.
MatrixStack.mvPushMatrix();
  drawGround();    
MatrixStack.mvPopMatrix();

正如我所说,当手动移动我的相机时,一切都很完美。那么我得到的旋转矩阵有什么问题?

4

3 回答 3

1

好吧,这是一个非常古老的问题,但现在我再次查看代码,我找到了解决方案。让手机处于横向状态,我不得不使用重新映射轴

SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R);

但这仍然没有旋转图像 - 即使 Y 轴和 -X 轴的映射工作正常。所以简单地使用

Matrix.rotateM(R, 0, 90, 1, 0, 0);

做这项工作。不是很好,但它确实有效。

我知道这是一个非常古老的问题,我不明白为什么我会犯这个错误,但也许有一天其他人也会遇到同样的问题。

希望这会有所帮助,托拜厄斯

于 2014-06-04T15:25:06.033 回答
0

如果它(曾经)在特定手机上工作,但不在您的手机上,我想 android 版本可能会在这里发挥作用。我们在mixare 增强现实引擎中遇到了这个问题,其中 Surfaceview 叠加在相机视图上。请考虑这里的信息可能不适用于您的情况,因为我们没有使用 OpenGL。

现代版本的 android 将返回默认方向,而以前的纵向是默认方向。您可以在Compatibility 类中查看我们如何查询它。然后使用此信息将不同的值应用到 RemapCoordinateSystem 调用检查行 739 和该文件的后续部分。Mixare 默认情况下也使用横向模式,所以我想我们的重映射值也应该适用于您的情况。正如我之前所说,我们使用的是 3x3 矩阵,因为我们没有使用 OpenGL,但我想这对于 OpenGL 兼容矩阵应该是相同的。

于 2012-07-31T12:54:46.563 回答
0

花点时间,玩一下方向矩阵,你会发现一列包含有用的价值。

除了记录每一列的值,看看哪个有用,试试四元数,继续玩值永远不要直接在渲染器中尝试代码,首先检查值

因为以后,您将有更多的输入选项,例如触摸,您也必须测试这些值,使用它们,也可以使用矩阵的灵敏度常数

于 2012-08-05T16:15:27.333 回答