0

特定のシェーディング アルゴリズムに関する論文を読んでいて、少しあいまいなセクションが 1 つあります。ここでアドバイスが得られるかどうか疑問に思っていました。

基本的には、最初にメッシュの 3D 頂点を取得し、それをウィンドウ座標 wx、wy、wz に変換する必要があると書かれています。wz は深度です。私がやったこの部分。

次に、このウィンドウ座標が深度バッファーを「通過」するかどうかをテストする必要があります。

これがすべてであり、深度バッファを「渡す」ことで何を意味するのかわかりません。それが何を意味し、openGLでこれをどのように実装できるかを知っている人はいますか?

編集:

より具体的には、特定の頂点が深度バッファーを通過したかどうかに関するフィードバックを提供するために、openGL が必要です。私は実際にこれらの頂点をレンダリングしているのではないので、openGL が「舞台裏で」すべての計算を行っても意味がありません。

4

1 に答える 1

3

深度テストは OpenGL パイプラインの一部であり、フラグメント (ピクセル) シェーダーの後に呼び出す必要があります。したがって、自分でこれを行う必要はありません。投影行列とビューポートを適切に初期化してWz、各頂点が計算され、頂点間で補間されるようにするだけです。このテストの一部のプロパティを構成できます。

OpenGL パイプラインの概要は次のとおりです。 http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization 第 7 章を​​参照してください: サンプルごとの処理

The depth test, if any, is performed; if it fails, then the fragment is culled and not added to the framebuffer.


どの頂点が深度テストに合格したかを知る必要があるとおっしゃいました。ただし、深さテストはフラグメントでのみ呼び出され、頂点では呼び出されません。したがって、ウィンドウの x、y、z 座標を持つ頂点が既にある場合は、同じ (x、y) 座標を持つ z 座標をチェックして、この深さテストに勝つ人を決定することができます...

于 2013-03-13T14:03:08.970 に答える