1

拡張現実アプリのプレビュー カメラで OpenGL シーンを調整しようとしていますが、定義された OpenGL パースペクティブとカメラ プレビューが一致していないようです。周りを見渡すと、私の視野は明らかに広すぎます (垂直方向と水平方向の両方で)。

Q:両方を校正するという考えを誤解しましたか?

編集:次のチェックを行いましたが、結果を自分で説明できません。以下の射影行列を使用するtrueVerticalFOVと、カメラのプレビューと OpenGL が完全に一致します。

getVerticalViewAngle()正しい値を返さなかったようです。FOV を物理的に測定したところ、結果もtrueVerticalFOV.

新しい質問:なぜそうなのですか? 助言がありますか?

カム プレビュー サイズと GLSurfaceView も 800x480 で、カム ズームはゼロです。

float horizontalFOV =
    camera.getParameters().getHorizontalViewAngle();    // = 60.5
float verticalFOV =
    camera.getParameters().getVerticalViewAngle();      // = 47.1
float camAspect = hFOV / vFOV;                          // = 1.2845...

float displayWidth =
    getResources().getDisplayMetrics().widthPixels;     // = 800
float displayHeight =
    getResources().getDisplayMetrics().heightPixels;    // = 480
float displayAspect = displayWidth / displayHeight;     // = 1.666...

float trueVerticalFOV = horizontalFOV / displayAspect;  // = 36.30...

/編集

デバイスのカメラの垂直 FOV:

projectionFieldOfView = camera.getParameters().getVerticalViewAngle();

GLSurfaceView のアスペクト比:

public void onSurfaceChanged(GL10 unused, int width, int height) {
    ...
    projectionAspect = (float) width / (float) height;
    ...
}

OpenGL の射影行列:

Matrix.perspectiveM(
    projectionMatrix,           // projection matrix array
    0,                          // array offset
    projectionFieldOfView,      // FOV [deg]            = 47.1 deg
    projectionAspect,           // aspect ratio         = 1.667
    projectionNearClipping,     // Near clipping plane  = 1
    projectionFarClipping );    // Far clipping plane   = 3000
4

0 に答える 0