我正在使用Android增强现实应用程序上的OpenGL ES 2.0。我的目标是在给定位置显示虚拟对象(目前为矩形),以给人以它在世界上真实的位置的印象。到目前为止,我可以在需要的地方显示蓝色矩形(例如,以米为单位的(0; 0.5; -1)点)。
当我旋转头部时,矩形会朝相反的方向移动,这是预期的行为。但是,它还不够“快”:当我根本无法看到它时,我仍然可以看到它的一半,因为我正面临另一个方向。
我的第一个想法是,当我创建投影矩阵时,这个问题与FOV太大有关。如下所示,我正在使用透视投影:
@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, (float)width, (float)height);
Matrix.setIdentityM(mProjectionMatrix, 0);
Matrix.perspectiveM(mProjectionMatrix, 0, mFOV_Y, DisplayConst.SCREEN_RATIO, mZNear, DisplayConst.GLASSES_FAR_PLANE);
// mFOV_Y: 12.0f (degrees); screenRatio: 1.8f; nearPlane: 0.01f; farPlane: 100.0f (meters);
}
但是,即使使用我使用的AR头戴式耳机的理论FOV_Y,问题仍然存在。我需要给出一个非常低的值(+ -3°)来近似正确的值,这使我感到困扰,因为我认为它与实际值不符。 对于OpenGL相机,我在每个绘制步骤中都根据AR头戴式耳机的姿势更新了eyePos和LookAt参数,并且该部分似乎可以正常工作。
我是否错过了可能引起这种影响的视图或投影矩阵?