1

答えを探しましたが、まだ理解できる答えが見つからなかったので、深度バッファの値を計算する方法を尋ねています。

https://en.wikipedia.org/wiki/Z-bufferingでは 、画像としての式は次のとおりです。 ここに画像の説明を入力

ここでは私が書いています:
z' = (2^d -1 ) * ((遠 + 近)/(2 * (遠 - 近) + (1 / z) * (-遠 * 近) / (遠) - near) + 1/2) d が z バッファーの深さ (私の場合は 24 ビット) で、z が頂点の z 値の場合。

簡単なコードを書いて実行し、深度バッファ値を読み取って計算しようとしましたが、異なる回答が返ってきました。

私のコード例:

/* init */
#define CUBE_SIDE_SIZE 0.25
glViewport(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 
glOrtho(-1, 1, -1, 1, -1, 1);
/* draw */
glEnable(GL_DEPTH_TEST);
glBegin(GL_QUADS);
glColor3f(1, 0, 0);
glVertex3f(-CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(-CUBE_SIDE_SIZE, CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(CUBE_SIDE_SIZE, CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glVertex3f(CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE, -CUBE_SIDE_SIZE);
glEnd();

深度バッファ 0.375 値から読み取りました。計算でこの値を取得するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

2

nearValue は -1、farValue は +1 です。あなたの立方体は -0.25 です。したがって、近い面からの距離は 0.75 です。z 値は深度範囲にスケーリングされ、デフォルトは [0,1] です。farValue-nearValue = 2 なので、深さの値は 0.75/2 = 0.375 です。

また、透視投影の式を投稿しましたが、正投影を使用しています。

于 2013-07-14T14:14:02.823 に答える