GL wikiでは、深度関数に GL_LEQUAL を使用することを推奨しています。また、深度関数のデフォルトは GL_LESS です。これらの関数のいずれかを使用すると、奇妙な結果が得られます。この図では、赤い正方形が青い正方形の前にある必要があります (両方の正方形は同じサイズです)。
ただし、 を使用glClearDepth(0.0)
してから を使用すると、glDepthFunc(GL_GREATER)
変更されていないプログラムを実行すると、次のようになります。
もう少し考えてみると、GL_LESS が結果を与えるのは理にかなっています: 入力深度値が格納されている値よりも小さい場合、フラグメントが書き込まれます。
カメラを に配置して(1, 0, 0)
方向を見た場合、 のオブジェクトが のオブジェクトの前にある(0, 0, 0)
と予想されます。GL_LESS を使用すると、オブジェクトはそのフラグメントが書き込まれるものではないでしょうか?(0.5, 0, 0)
(0, 0, 0)
(0, 0, 0)
編集:ニコル、射影行列について言及してくれてありがとう。設定が間違っていたようです。私はしばらくの間、arcsynthesis.org のチュートリアルに従い、コードを自分のプロジェクトに適合させていましたが、射影行列から逸脱し、glFrustum のマニュアル ページに記載されている数学を使用して、その関数の独自のバージョンを実装し、NeHe の gluPerspective を使用しましたgluPerspective を置き換える置換。行列の計算が正しいため、置換が機能しなかった理由がわかりません (さまざまなオンライン計算機と比較して確認しました)。マトリックスを使用すると、GL_LESS で正しい結果が得られます。