SpriteBatchのカラー設定を使用するだけではこれが不可能だと思うので、ピクセルのアルファ値を尊重しながら、すべてのピクセルを取得して白にする単純なシェーダーを作成しようとしています。
Joel Martinezが出した答えは正しいように見えますが、SpriteBatchを使用してスプライトを描画するときに、それをどのように組み込むのですか?
これがあなたが探しているものだと思います
sampler2D baseMap;
struct PS_INPUT
{
float2 Texcoord : TEXCOORD0;
};
float4 ps_main( PS_INPUT Input ) : COLOR0
{
float4 color = tex2D( baseMap, Input.Texcoord );
return float4(1.0f, 1.0f, 1.0f, color.w);
}
これは非常に単純です。テクスチャからサンプリングされた色を取得し、テクスチャのアルファ値を使用して真っ白な色を返すだけです。
MSのドキュメントページを添付します。すべての手順を実行すると、すぐに起動して実行できるようになります。
http://msdn.microsoft.com/en-us/library/bb203872(MSDN.9).aspx
要約すると、ファイルを作成して実行する必要があります(上記のコードを組み合わせて、実際に目的に合っています)、プロジェクトに追加し、ソースファイルにロードして、説明されているようにレンダリング中に使用しますリンクで。
ところで:SpriteBatchはよく覚えていませんが(自分で作成することを選択したため、制限が厳しすぎます)、レンダリングに送信するマテリアルにエフェクトを設定する必要があるかもしれません。とにかく-多分あなたはここでそれを見つけるでしょう:
http://creators.xna.com/en-us/utilities/spritebatchshader
そして、そこに到達したい場合の高度なコード:
http://creators.xna.com/en-us/sample/particle3d
楽しむ
SpriteBatchでカスタムシェーダーを使用する場合は、次のサンプルを確認してください。
Joel Martinezは確かに正しいです。このように、効果をtintWhiteEffectにロードしたSpriteBatchで使用します。
spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);
tintWhiteEffect.Begin();
tintWhiteEffect.CurrentTechnique.Passes[0].Begin();
// DRAW SPRITES HERE USING SPRITEBATCH
tintWhiteEffect.CurrentTechnique.Passes[0].End();
tintWhiteEffect.End();
spriteBatch.End();
SpriteSortMode.Immediateはここでのトリックであり、SpriteBatchのデフォルトのシェーダーを独自のものに交換することができます。スプライトは1回の描画呼び出しでバッチ処理されないため、これを使用するとスプライトの描画が少し遅くなりますが、違いに気付くことはないと思います。
私は独自のピクセル シェーダーを作成していません。大部分はネットからのサンプルを変更したものです。ピクセルの R、G、B コンポーネントの値をそれぞれ 255 未満である限り増やします。スプライトの色を徐々に白にシフトします。ねえ、それは韻を踏む。