OpenTKOpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。Coreに対応する機運があるようです。アルファブレンディング後ろが透けて見えるアルファブレンディングという言葉だけでは、もしかしたら難しく聞こえるかもしれませんが、ただ単純に半透明のポリゴンを描画してやるということです。普段はちょっとOpenGLの設定をしたらすぐに意識しなくなりますが、あえていろいろなバリエーションを動作させてみたいと思います。「アルファ(α)」とは何かグラフィックでαというのは、通常は色の要素の一つを指します。色は赤(R)、緑(G)、青(B)で表されますが、ここに透明度としてアルファ(α)を加えます。αとは言いますが、プログラミングで用いられる場合はAという要素名になることが多いようです。OpenTKにはColor4という構造体が用意されており、アルファ値も色として含まれています。GL.Beginを使った描画にはColor4とColor3がありますが、これには前者がα有り、後者がα無しという違いがあります。Color4構造体の静的プロパティを使う場合、Transparent以外はすべてα値が255(つまり不透明)のため注意してください。一口にアルファブレンディングと言っても、いくつか種類があります。画像加工にも計算式:Color=Src×Dest=Src×[Dest]+Dest×[0]=Src[0]+Dest×[Src]反転合成フィルムカメラのネガのようになるブレンディング計算式:Color=Src×(1.0-Dest)=Src×[1-Dest]+Dest×[0]※Srcは上から重ねる色、Destは元の色、Src.AとDest.Aはそれぞれのアルファ値です。プログラム通常の合成ソースコードは、合成方法の指定に注目してください。//ウィンドウの起動時に実行される。BlendingFactorDest.OneMinusSrcAlpha);torus.CreateBuffers();sphere.CreateBuffers();plate.CreateBuffers();}まずは起動時に、アルファブレンディングを許可します(178行目)。どのような式でブレンドするかを指定します(179行目)。指定しない場合はブレンドしない場合と同じになります。BlendingFactorDest.Zero);}それぞれの合成を行うためのBlendFunc関数は上記の通りになります。例外として、減算合成の場合はBlendEquation関数をいじる必要があります。257行目の意味は「背景の処理結果から前景の処理結果を引け」というものですが、通常の描画で使うことは少ないと思うため補足でパラメータを列挙しておきます。それぞれの合成の結果は下のようになります。Vector3.UnitY);sphere.Draw();GL.PopMatrix();悪い例(わかりやすいように球のアルファ値を1.0にしています。)この画像はほぼ同じプログラムを動作させたものですが、青い物体の後ろにあるべき球の色がありません。これは設定した描画順と、視点と物体の間の距離が違うということで起きるものです。この現象を簡単に防ぐためには、透明ポリゴンを最後に描画したり、透明ポリゴンを描画する間は深度テスト(描画するポリゴンを遮るポリゴンがあるかどうかの判定)をやめたりするなどの処理が必要になります。高度な予防法としては、マルチサンプリングやA-Bufferなどの方法があるようです。前景と背景の処理結果の単純な足し算FuncSubtract前景の処理結果から背景の処理結果を引くFuncReverseSubtract背景の処理結果から前景の処理結果を引くMin前景と背景の処理結果の小さい方を選択Max前景と背景の処理結果の大きい方を選択もし画像処理をする場合は、上の指定を組み合わせることになるかもしれません。MasuqaT.NET。