1

3D シーンを表示するために glut を使用します

glReadPixels(300,//xPos
             300,//yPos
             1,1,//size
             GL_DEPTH_COMPONENT,//type is depth
             GL_FLOAT,//return type is  float
             &point);

この関数を使用して、ピクセルの深さを取得したいと考えています。ただし、返されるデータは常に範囲内にあります[0,1]。たとえば、0.999872, 0.999921..... 実際の深度に変換するにはどうすればよいですか (オブジェクトからカメラへ)

4

2 に答える 2

0

この関数を使用して、ピクセルの深さを取得したいと考えています。ただし、返されるデータは常に [0,1] の範囲 (0.999872、0.999921..... など) です。

値は、glDepthRange で設定された範囲内にあります。デフォルトは [0, 1] です。

それを実際の深度に変換するにはどうすればよいですか (オブジェクトからカメラへ)

画面空間の座標 (あなたが持っているもの) をワールド空間に投影することによって。これにはgluUnProjectを使用できます。受け入れる行列は、modelどの空間に ptoject するかによって異なります。OpenGL にはカメラがないため、定義したビュー マトリックスにすべて依存します。描画コードを示していないため、必要なビュー マトリックスを保持するためにモデルビュー マトリックスのコピーをどの時点で取得するかはわかりません。

于 2012-10-06T09:55:45.887 に答える
0

glReadPixels マニュアル:

                    Depth values are read from the depth buffer.
                    Each component is converted to floating point such that the minimum depth
                    value maps to 0 and the maximum value maps to 1.
                    Each component is then multiplied by GL_DEPTH_SCALE,
                    added to GL_DEPTH_BIAS,
                    and finally clamped to the range [0, 1]
于 2012-10-06T09:06:54.530 に答える