#region OpenTK

OpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。
現在は.NET Coreに対応する機運があるようです。

デプステスト&アルファテスト

テストとは

今回はデプステストとアルファテストというものを行います。

テストとは文字通り試験のことで、試験には合格と不合格があります。OpenGLの世界のテストは、合格ならば表示、不合格ならば非表示というものです。

まずは、簡単なデプステストとアルファテストを取り上げます。

自然な描画に必須なデプステスト

ところで、テストは何に役立つのでしょうか。

実はすでに以前のプログラムから使っています。使っている理由は簡単、無いと表示がとてもおかしくなるからです。

デプスは深さですが、ポリゴンが視点から見てどれくらい距離があるかということを記録していきます。そして、描画時に前後関係を用いてテストし、描画するしないを判定しているのです。

また、デプスシャドウという影(Shadow)を描画する方法の一つに使われることもあります。

まだ使い道は少ない

Alpha&Depth Test
トーラスの表示が変

ソースコードは、テストの設定行が少しだけ追加されました。また、変化をわかりやすくするためにαが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を超えると描画)を指定しています。

それぞれのテストの有無による描画は下のようになります。

DepthTestOnDepthTestOffAlphaTestOnAlphaTestOff

記事

外部リンク

Thanks