0

gluOrthoの観点から見たOpenGLで3Dシーンをレンダリングしました。私のアプリケーションでは、ボリューム100x70x60mm(1000x700x600ピクセル)の立方体の前面を見ています。この立方体の中に、ちょうど真ん中に位置し、立方体(半径300ピクセル)を「埋める」単純な青い球をレンダリングしました。

ここで、立方体内の特定のポイントでのピクセルのカラー値(3D)を読み取りたいと思います。つまり、ポイント(100,100、-200)が青か空白(黒)かを知りたいのです。

glReadPixelsは色の2D抽出のみを許可し、DEPTH_COMPONENTで試しましたが、これがバイト形式で何を返す必要があるかわかりませんか?2つを組み合わせる方法はありますか?私は何かが足りないのですか?

私はJavaとJOGLでEclipseを使用しています。

4

2 に答える 2

4

これは、OpenGLのコンテキストでは実行できません。アプリケーションのデータ構造と連携して機能する、ある種のシーングラフまたはその他のスペース分割スキームが必要になります。

理由は単純です。フレームバッファは、各ピクセル位置で目に最も近いフラグメントの色と深度のみを格納します(通常のGL_LESS深度関数を想定)。Zバッファに格納されている深度値は、後続の各フラグメントが既存のフラグメントよりも目から近いか遠いか、したがって新しいフラグメントが古いフラグメントを置き換える必要があるかどうかを判断するために使用されます。フレームバッファには、深度テストの最新の勝者からの色と深度の値のみが格納され、そのピクセル位置にマッピングされたフラグメントのセット全体は格納されません。実際、その場合、必要なグラフィックメモリの量を制限する方法はありません。

于 2011-01-27T01:02:13.627 に答える
1

あなたはこの誤解に最初に陥ったわけではないので、私はそれを可能な限り最も率直な方法だと言います。OpenGLはそのようには機能しません。OpenGL never(!)は、オブジェクトや複雑なシーンを処理しません。OpenGLが知っているのは、フレームバッファ、シェーダ、および単一の三角形だけです。通常は三角形で構成されるオブジェクトを描画するときは常に、OpenGLは一度に各三角形のみを表示します。そして、フレームバッファに何かが描画されると、以前にそこにあったものはすべて失われます。

レンダリングされたシーンをそのパーツに分解するラスターライザー(OpenGLのように)の概念に基づくアルゴリズムがあり ます。デプスピーリングはその1つです。

于 2011-01-27T10:21:08.203 に答える