将FOV角度转换为透视投影参数

问题描述 投票:3回答:1

我有一个程序来获取设备后置摄像头的FOV角度,该角度以度为单位返回水平和垂直角度,如下所示:

54.8
42.5

是否有简单的转换方法可以应用来获得正确的“左,右,下,上”参数以传递到OpenGL的Matrix.frustrumM()?

Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far);

我将OpenGL形状叠加到CameraView上,并希望确保它们相对于摄影机Feed中的真实对象正确绘制,对于所有设备,无论摄影机的FOV如何。

非常感谢!


编辑:这是一个解决方案,以防有人遇到此问题:

private float[] perspectiveM(float fovY, float fovX, float zNear, float zFar)
{
    float[] projMatrix = new float[16];
    float aspect = fovX / fovY;
    fovY = (float) ((fovY /180.0) * Math.PI); // degrees to radians
    float g = (float) (1 / Math.tan(fovY / 2));

    for(int i=0; i<16; i++) {
        switch (i) {

        case 0:
            projMatrix[i] = g / aspect;
            break;
        case 5:
            projMatrix[i] = g;
            break;
        case 10:
            projMatrix[i] = (zFar + zNear)/(zNear - zFar);
            break;
        case 11:
            projMatrix[i] = -1.0f;
            break;
        case 14:
            projMatrix[i] = (2 * zFar * zNear)/(zNear - zFar);
            break;
        default:
            projMatrix[i] = 0.0f;
        }
    }

    return projMatrix;
}

然后将返回结果分配给您的投影矩阵。

android opengl-es camera opengl-es-2.0 perspective
1个回答
2
投票
我没有意识到PerspectiveM仅限于某个API级别,但是您可以轻松地自己重新创建该函数。公式在gluPerspective的手册页上,其工作方式相同。
© www.soinside.com 2019 - 2024. All rights reserved.