デプステスト&アルファテスト
テストとは
今回はデプステストとアルファテストというものを行います。
テストとは文字通り試験のことで、試験には合格と不合格があります。OpenGLの世界のテストは、合格ならば表示、不合格ならば非表示というものです。
まずは、簡単なデプステストとアルファテストを取り上げます。
自然な描画に必須なデプステスト
ところで、テストは何に役立つのでしょうか。
実はすでに以前のプログラムから使っています。使っている理由は簡単、無いと表示がとてもおかしくなるからです。
デプスは深さですが、ポリゴンが視点から見てどれくらい距離があるかということを記録していきます。そして、描画時に前後関係を用いてテストし、描画するしないを判定しているのです。
また、デプスシャドウという影(Shadow)を描画する方法の一つに使われることもあります。
まだ使い道は少ない
トーラスの表示が変
ソースコードは、テストの設定行が少しだけ追加されました。また、変化をわかりやすくするためにαが0.3の緑色の球を増やし、赤色の球のαを0.6にしました。
//デプステスト GL.Enable(EnableCap.DepthTest); GL.DepthFunc(DepthFunction.Lequal); //アルファテスト GL.Enable(EnableCap.AlphaTest); GL.AlphaFunc(AlphaFunction.Greater, 0.5f);
まずは起動時に、テストを許可します(180,184行目)。
次に適応する関数を決めます。両方の第1引数の指定は次の通りです。AlphaFuncの第2引数は比較値です。DepthFuncの比較値は、そのピクセルにおいて描画予定のポリゴンの深度値です。
- Never
- 全て不合格
- Less
- 比較値未満なら合格
- Equal
- 比較値と同じなら合格
- Lequal
- 比較値以下なら合格
- Greater
- 比較値を超えるなら合格
- Notequel
- 比較値と異なれば合格
- Gequal
- 比較値以上なら合格
- Always
- すべて合格
今回は、デプステストでLequal(普通の描画)、アルファテストでGreaterと0.5(アルファ値0.5を超えると描画)を指定しています。
それぞれのテストの有無による描画は下のようになります。