OpenTKOpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。Coreに対応する機運があるようです。TextureEnvMode.Combineより複雑なテクスチャの合成テクスチャの合成で紹介したように、ポリゴンに対して複数の色情報をどう使うかという設定があります。TextureEnvModeにはAdd、Blend、Decal、Modulate、Replace、そしてCombineがあり、今回はその中のCombineだけについての説明です。Combineではとても複雑なこともできますが、その場合は素直にシェーダーを用いたほうが簡単です。(そもそも、固定機能自体が非推奨なのですが...)今回はこれらの画像を合成します。ダミーのテクスチャにする画像のサイズは何でもいいのですが、他のものと同じサイズにしました。以前は特に言及していませんでしたが、テクスチャの合成はポリゴン色をベースとして、TextureUnitで数字が小さいものから順に行われていきます。テクスチャの色情報だけを使いたい場合は、Unit0ではReplaceとしておく必要があるなど、注意が必要です。複雑な合成でも、前のテクスチャ合成の結果を使ってさらに合成するということの繰り返しとなります。ダミーのテクスチャを使ったUnitを使って合成を行うというテクニックもあるようです。設定が面倒なCombine...線形補完、減算ソースコードは、Combineの設定にだけ注目してください。ちなみに、テクスチャの色は白です。※列挙体(Enum)の一覧は途中に挿入すると見づらくなるため、ページの一番後ろに載せています。(int)TextureEnvMode.Replace);ここでは今までのモードのReplaceを使い、ベースにポリゴンの色を使わないという設定をします。(int)TextureEnvModeOperandAlpha.SrcAlpha);ここでようやくCombineを使います。Combineでは、RGBとα(透明度)を別々に合成することになります。CombineRgb(Alpha)で、合成に使う式を指定します。Source?Rgb(Alpha)またはSrc?Rgb(Alpha)で、合成に使う色情報を指定します。Operand?Rgb(Alpha)で、使う色情報への加工(と言っても1から減算など)を指定します。ここのCombineの指定について、RgbはUnit0の結果(Previous)とUnit1のテクスチャを0.6(EnvColor.Alpha)で線形補間、AlphaはUnit0の結果(Previous)とUnit1のテクスチャを乗算、となります。Unit1の出力は、CをRgb、AをAlphaとして、CUnit1=CUnit0⁢AEnv+CTex1⁢1-AEnvAUnit1=AUnit0⁢ATex1となります。(int)TextureEnvModeOperandAlpha.SrcAlpha);ここのCombineの指定について、Rgbはテクスチャ色(PrimaryColor)からUnit1の結果(Previous)を引いたもの、AlphaはUnit0の結果(Previous)とUnit1のテクスチャを乗算、となります。Unit2の出力は、CをRgb、AをAlphaとして、CUnit2=CPorygon-CUnit1AUnit2=AUnit1⁢ATex2となります。Unit3以降は使っていないため、表示されるものはCUnit2とAUnit2になります。よって、実際に処理される計算式は、CをRgb、AをAlphaとして、Cout=CPorygon-CTex0⁢AEnv+CTex1⁢1-AEnvAout=ATex0⁢ATex1⁢ATex2となります。各種列挙体TextureEnvParameterの中でCombineに使う物をを以下に示します。TextureEnvModeOperandAlphaを参照してくださいGL.TextEnvの第3引数CombineRgbとCombineAlphaで使われる、TextureEnvModeCombineを以下に示します。計算式:ColororAlpha=arg0-arg1Dot3Rgba,Dot3Rgbadot3バンプマッピングを実現するときに用いるようです計算式:value=4⁢arg0-0.5⋅arg1-0.5Source?RgbとSource?Alphaで使われるTextureEnvModeSourceを以下に示します。Texture今のUnitのテクスチャの色Texture?Unit?のテクスチャの色ConstantEnvColorで設定した色PrimaryColorポリゴンの色Previous前の段階で合成された色Operand?RgbとOperand?Alphaで使われる、TextureEnvModeOperandRgbとTextureEnvModeOperandAlpha(※付)を以下に示します。MasuqaT.NET。