2017-01-04 10 views
0

例として、2つのオブジェクトがあり、それらを(0,0,100)から(0,0,0)まで見ることができます。OpenGLのデプスバッファにアクセスする方法はありますか?

オブジェクト1:センターでキューブ(長さ/幅/高さ10) Object2に:その後、センターの球(半径5)

、私は唯一のキューブを見ることができますが、(この時点で私は視野を考慮していないとビューボリューム)

OpenGLはzバッファアルゴリズム(ウィンドウの中央に )を使用するため、ピクセルは最初に4つの深度値を持ちます。 深さ90(立方体の前面)、深さ110(立方体の背面) 深さ95及び105(球用)

を加え:次いで、zバッファディスプレイキューブの色のみ(深さ90で、フロント)

ここで、ウィンドウの中心にピクセルに保存される値4を取得します。 その値を得る方法はありますか?

+0

すみませんでしたか?分かりません。 4はどこから来たのですか? –

+3

同時に4つの深度値があることはありません。一番手前のものだけが格納されます。オーバーライド数は、フラグメントが処理される順序に完全に依存します。 – BDL

+0

また、他のワールドまたはビューマトリックスを使用していない起点(0,0,0)で球を描いていて、バック面のカリングをオンにしている場合、その球のすべての面が内側を指している。 –

答えて

1

これは逆方向です。ピクセルは深度値を持たない。ピクセルの色は、シーン内のオブジェクトの奥行き、相対的な位置と向き、およびカメラの設定に基づいて計算されます。ピクセルは入力データではなく、すべての結果です。

シーンの「スペース」内に線を得るために、関心のあるポイントでカメラ変換の逆を実行できます。次に、その線をシーン内のオブジェクトに交差させることができます。これらの交点は、そのピクセルの背後にあるオブジェクトのZ値です。

しかし、これもやはり通常の技術よりもむしろ逆になります。おそらく、あなたが達成しようとしていることが分かっていれば、具体的な解決策を提案することができます。 formatパラメータとしてGL_DEPTH_COMPONENTとともに

void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data);

0

は、次のOpenGLのAPIを使用してください。返される値は、0と1の間であり、視錐台に基づいて変換する必要があります。 4つの値を同時に取得することはありません。個別のオブジェクトを個別にレンダリングし、必要な異なるポイントを読み取ることができます。

関連する問題