0

ndcと画面座標系の関係で混乱しています。私がしたことは

  1. 画面座標を選択します(たとえば、画面上のタッチポイント)。

  2. 次に、画面座標をgluUnprojectに渡します。深度変数(gluUnprojectの3番目の変数)を0.0fに設定しました。

  3. 次に、オブジェクトの座標をmodelviewmatrixとprojectionmatrixに乗算します。

  4. その後、スペースを切り取りました。次に、クリップスペース座標をWで除算します

  5. 最後に、ndc座標を画面座標にスケーリングしました。
  6. したがって、結果は、Z座標を除いて、最初に選択した座標と同じでした。実際、Zの結果は-1.0fに等しかった。

この後、gluUnprojectの3番目の変数を1.0fに変更しました。これは、結果が0.0fに等しいと思います。しかし、結果は1.0fでした。

それで、ここに正規化された座標系とスクリーン座標系の間の関係は何であるかという質問があります。gluUnproject関数の深度変数を設定するにはどうすればよいですか?

4

1 に答える 1

3

正規化された座標系と画面座標系の関係は何ですか?

正規化されたデバイス座標は[-1、+ 1]の範囲で表され、クリップ空間座標をW成分で割って得られます。

これらは、ビューポートパラメータと深度範囲パラメータによってウィンドウ空間座標に変換されます。


gluUnproject関数の深度変数を設定するにはどうすればよいですか?

ウィンドウ空間の座標を正規化されたデバイス座標に変換し直す場合は、変換するポイントのウィンドウ空間のz値が必要です。したがって、OpenGLのFAQから直接:

GLdouble z;
glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_DOUBLE, &z);

OpenGLは非線形深度を深度バッファに格納することに注意してください。

于 2012-08-13T14:02:36.787 に答える