3

デバイスの背面カメラのFOV角度を取得するプログラムがあります。これは、次のように水平角度と垂直角度を度単位で返します。

54.8
42.5

OpenGL の Matrix.frustrumM() に渡す正しい「左、右、下、上」パラメータを取得するために適用する簡単な変換はありますか?

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

OpenGL シェイプを CameraView にオーバーレイしていますが、カメラの 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;
}

次に、返された結果を射影行列に割り当てます。

4

1 に答える 1

2

私は、perspectiveM が特定の API レベルに限定されていることに気づきませんでしたが、関数を自分で簡単に再作成できます。式は gluPerspective のマニュアル ページにあり、同じように機能します。

これらの方程式を使用して、フロート マトリックスを自分で作成することができます。

http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml

于 2012-06-21T00:43:24.427 に答える