我正在学习OpenGL,并尝试将其用于增强现实。这是我的设置:
我的目标是在确切的球体位置显示形状(例如,立方体)。
为了使事情简单,真实的相机被认为是世界起源,并且我确保相机使用与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
谢谢。