色の合成

だいぶ忘れている上,多分あんまり理解してなかった点.
DirectXで色の合成を行う場合マテリアルやテクスチャ,またはTextureFactorのアルファ値を用いることになる.
MSDNLibrary読んでないけど多分以下のような感じ.

  1. RenderStateでアルファブレンディングの許可
    1. ディスプレイに表示するカラーを決定する合成の方法の設定
  2. TextureStateでオブジェクトのアルファ合成の方法を決定
    1. 合成方法・・・Add, Modulate, Subtract, SelectArg1とかとか
    2. 合成対象・・・テクスチャカラー,マテリアルカラー,TextureFactorで指定したカラーとかとか

マテリアルカラーは普通に頂点カラーを変更すればよく,もし頂点バッファを利用していてロックされている場合は
動的にマテリアルを変更することも可能

Material material = new Material;
material.Diffuse = System.Drawing.Color.FromArgb(255, 255, 0, 0);
material.Ambient = System.Drawing.Color.FromArgb(255, 255, 0, 0);
device.Material = material;

同様に,ロックされた頂点カラーを変更したい場合はTextureStateを変更することで可能

 // TextureFactorに色を設定
 device.RenderState.TextureFactor = System.Drawing.Color.FromArgb(100, 255, 0, 0).ToArgb();
 // TFactorとテクスチャカラーの乗算でオブジェクトの色を決定
 device.TextureState[0].ColorOperation = TextureOperation.Modulation;
 device.TextureState[0].ColorArgument1 = TextureArgument.TFactor;
 device.TextureState[0].ColorArgument1 = TextureArgument.TextureColor;
 // TFactorのアルファ値を使用
 device.TextureState[0].AlphaOperation = TextureOperation.SelectArg1;
 device.TextureState[0].AlphaArgument1 = TextureArgument.TFactor;

これを用いてメッシュとかも動的に色やアルファ値を変えたりできる.