【问题标题】:Android - Moving view according to sensor rotation matrixAndroid - 根据传感器旋转矩阵移动视图
【发布时间】:2016-12-23 12:21:14
【问题描述】:

前言:我对图形很陌生。

我正在尝试更多地了解 AR,并有一个宠物项目可以让我探索 AR 对象的位置。实际上,我想在现实世界中粘贴一张平面图像,并使用手机的传感器移动它,使其只有在我看着它时才可见。

我按照 Android 开发者页面上的示例进行操作,并且我有一个旋转矩阵和方向。两者似乎都有道理。我有我的图像,现在我只想始终固定在北方,但最终会将其随机化为偏离北方 X 度以及一些向上/向下等。

我不知道如何将我的图像放置在 3D 空间中,以及如何使用旋转矢量来确定图像在屏幕上的位置。

任何帮助或文章链接将不胜感激。

我正在使用来自 Android 开发者页面的示例代码:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        mGravity = event.values;
    } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        mGeomagnetic = event.values;
    }
    if (mGravity == null || mGeomagnetic == null) {
        return;
    }

    float R[] = new float[16];
    float I[] = new float[9];
    if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) {
        Log.d(TAG, ...);
    }
}

我的直觉是取RMatrix.invertM,然后使用Matrix.multiplyMV 将倒转的旋转矩阵乘以我要渲染的对象的世界位置(现在假设对象在我以北5m把它放在 (0, 5, 0, 0))。我使用了指南针和水平仪来确保我的表面是平的并且我的手机朝向 N。上面打印语句的结果是以下旋转矩阵:

-0.37,  0.93,  0.02,  0.00
-0.92, -0.37,  0.07,  0.00
 0.07,  0.01,  1.00,  0.00
 0.00,  0.00,  0.00,  1.00

这似乎是错误的,因为矩阵应该是单位矩阵:

1, 0, 0, 0
0, 1, 0, 0
0, 0, 1, 0
0, 0, 0, 1

【问题讨论】:

    标签: android 3d augmented-reality


    【解决方案1】:

    与其试图找出你错在哪里,我强烈建议你尝试自己去解决它。网上有示例和回答的问题可以准确显示您想要的内容,因此显然您可以尝试并从中学习(一个示例:Android sensors for OpenGL,github 上也有一些)。

    另外,既然您说您对图形非常陌生,我建议您首先对矩阵和转换以及对 3D 空间的理解进行一些深入的阅读。

    示例:http://www.songho.ca/opengl/gl_transform.html https://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2012-05-05
      • 2016-02-16
      相关资源
      最近更新 更多