AR眼镜和OpenGL:如何在相机跟踪的现实对象上显示形状

时间:2018-07-05 09:50:20

标签: android opengl-es augmented-reality

我正在学习OpenGL,并尝试将其用于增强现实。这是我的设置:

  • 我戴着在OpenGL ES 2.0上运行Android的AR眼镜
  • 我有一个物体,比方说一个放在我面前的桌子上的球体
  • 房间里有一个摄像头,可以同时跟踪眼镜和现实世界中物体的位置和方向。

我的目标是在确切的球体位置显示形状(例如,立方体)。

为了使事情简单,真实的相机被认为是世界起源,并且我确保相机使用与OpenGL相同的轴约定。由于LookAt() function,我正在使用相机发送的内容来定位OpenGL相机(eyePos,图像中心和upVector)。然后,我使用相机通过其模型矩阵发送的球体位置来转换立方体。

    Matrix.setIdentityM(mCube.mModelMatrix, 0);
    Matrix.translateM(mCube.mModelMatrix, 0, mCube.getTranslationX(), mCube.getTranslationY(), mCube.getTranslationZ());

    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
    Matrix.multiplyMM(mCube.mModelMatrix, 0, mMVPMatrix, 0, mCube.mModelMatrix, 0);
    mCube.draw(mCube.mModelMatrix);

对于投影矩阵,我使用具有眼镜屏幕比率和FOVy的透视矩阵。

问题:立方体没有出现在正确的位置:即使我的球体在2米外,它也位于真实世界的相机附近。

问题:我在使用真实相机作为世界原点来定位OpenGL相机和立方体的推理中是否存在缺陷?真实的相机坐标和OpenGL坐标之间有什么关系吗?感谢一些教程,我开始使用OpenGL ES,在玩具示例中,它似乎按预期工作。

这里是一个用实际数据说明的日志(单位:米):

Glasses Pos (position of OpenGL Camera): 0.16345 -0.17056 1.60904
Glasses LookAt: 0.226446 -0.051146 0.97268
Sphere Pos: 0.110058; -3.47E-4; 1.80024

谢谢。

0 个答案:

没有答案