現在、私のスプライトクラスでSetTextureColourという関数を使用しています。
public void SetTextureColour(Color Colour)
{
Color[] data = new Color[Texture.Width * Texture.Height];
Texture.GetData(data);
for (int i = 0; i < data.Length; i++)
{
if (data[i] == Color.White)
{
data[i] = Colour;
}
}
Texture.SetData(data);
}
スプライトのテクスチャのすべての白いピクセルの色を指定された色に変更するには、これは問題なく機能しますが、私が抱えている問題は、個々のスプライトだけでなく、そのテクスチャを共有するすべてのスプライトの色を変更することです。そのスプライトテクスチャのみのピクセルを変更できるようにするための解決策はありますか?同じテクスチャを持つ複数のスプライトに異なる色を指定する関数を使用できます。
前もって感謝します。
編集:
アドバイスを受けて、ピクセルシェーダーを使用してこれを実行しようとしましたが、これを実行しようとする前に使用したことはありませんでした。
sampler TextureSampler : register(s0);
float3 key_color;
float3 new_color;
float4 ChangePixel(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
float4 newColor = tex2D(TextureSampler, texCoord);
if (distance(key_color, color.rgb)<0.001f)
{
color.rgb = new_color;
}
return newColor;
}
technique PixelChange
{
pass Pass0
{
PixelShader = compile ps_2_0 ChangePixel();
}
}
ロードコンテンツを使用してロードされますが、これも使用してテクニックを設定します-
Effect1.CurrentTechnique = Effect1.Techniques["PixelChange"];
次に、これらの2行を使用して値を設定します-
Effect1.Parameters["key_color"].SetValue(Color.White.ToVector3());
Effect1.Parameters["new_color"].SetValue(Color.Red.ToVector3());
しかし、それは何もしないようです、誰かがこれで私を助けることができる可能性はありますか?私が言ったように、シェーダーを使用するのはこれが初めてなので、いくつかの援助を使用することができました。
最後に、エフェクトはspriteBatch.Beginで使用されるため、エフェクトが適用されていないかどうかは問題ではありません。