Android-根据传感器旋转矩阵移动视图

Android-根据传感器旋转矩阵移动视图,android,3d,augmented-reality,Android,3d,Augmented Reality,前言:我对图形很陌生 我正在努力学习更多关于AR的知识,并且有一个pet项目,可以让我探索AR对象的位置。实际上,我想在现实世界中粘贴一个平面图像,并使用手机的传感器移动它,这样只有当我看着它时它才可见 我遵循Android开发者页面上的示例,我有一个旋转矩阵和方向。两者似乎都有道理。我有我的图像,现在我只想一直固定在北部,但最终会随机将其设置为远离北部X度,以及一些向上/向下等 我不知道如何在3D空间中放置图像,以及如何使用旋转向量来确定图像在屏幕上的位置 如有任何帮助或文章链接,将不胜感激

前言:我对图形很陌生

我正在努力学习更多关于AR的知识,并且有一个pet项目,可以让我探索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, ...);
    }
}
我的直觉是取
矩阵。反转
R
的m
,然后使用
矩阵。乘以ymv
将反转旋转矩阵乘以我要渲染的对象的世界位置(现在假设对象在我以北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

与其试着看你错在哪里,我强烈建议你自己试着去做。web上有一些示例和回答的问题,这些示例和问题正好显示了您想要的内容,因此显然您可以尝试它们并从中学习(例如,github上也有一些示例)

另外,既然你已经说过你对图形非常陌生,我建议你先读一些关于矩阵和变换以及对3D空间的理解的大量书籍

示例: