質問

私は私がここでやりたいことができれば、私は全くわからないんだけど、私は、OpenGL(JOGLを使用)でレンダリングされるオブジェクトの束を持っています。オブジェクトのいずれかのグループのために、私はそのグループ内の特定のオブジェクトは、そのグループ内の他のオブジェクトの前に描画されていることを確認します。それは、画面上の他の深度バッファリングを台無し除いて、私は、作品を深度バッファビットをクリアし、「前」の最後のオブジェクトをレンダリングすること、および試してみた。

それは何に降りてくると、私はレンダリングされているオブジェクトのリストを持っていると私はそのリスト内の特定のオブジェクトは、(彼らはすべてのに同じ座標Zである)他のオブジェクトの前に描画されていることを確認したいです。それを行う方法はありますか?

おかげで、 ジェフ

役に立ちましたか?

解決

これは、透明なオブジェクト(アルファを持つ部品を持つオブジェクト!= 1)を描画するための非常に一般的な技術です。

は、最も一般的なアプローチは、最初のビルドにソート投影*カメラ行列を通過した後の「深さ」に沿って、あなたができることを描画するオブジェクトのツリーです。あなたは一時バッファに世界でそれらを処理しているとして、基本的にだけではなく、盲目的にGPUに三角形を投げるのは、1つのことで、あなたのオブジェクトを1つずつ送信します。これらのオブジェクトは、(オブジェクトによって、どちらかの単純オブジェクトを、または完全なソートオブジェクト間で同様のパッチをもとに吹か)次に、あなたのバッファを並べ替えることができ、すべての三角形と、すべての頂点カラー/バーテックスシェーダ/テクスチャ名+ IDなどの完全な知識を持っています。

私が正しくリコール場合は、

glDepthMaskトリックは、このようなものになります:

glDepthMask(true);
drawOpaqueObjects();
glDepthMask(false);
drawTransparentObjects();

が最良の結果を得るために透明オブジェクトは、バックツーフロント、ほとんどの(簡単な)アプリケーションでは、これは問題ではない並べ替えられています。

編集:あなたは有効にして無効にデプスバッファ書き込みながら第二技術のために、あなたはまだテストバッファ深度を使用することに注意してください、あなたの通常のオブジェクトの背後にあるので、透明なオブジェクト(例えば画面「に」ヘルメットポインティング)ウォン」トンGET描かれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top