シェーダーに基づいた照明システムを構築したい。http://stackoverflow.com/editing-helpそのために、特定の関数をテクスチャに適用する必要があります。C#/ XNAのシェーダーアルゴリズムにテクスチャを渡すにはどうすればよいですか?私はこれをやってみました:
foreach (EffectPass pass in effect.Techniques[0].Passes)
{
pass.Apply();
}
spriteBatch.Draw(shadowmap,
new Rectangle(0, 0, range * 2, range * 2),
new Rectangle((int)screenPos.X - range, (int)screenPos.Y - range, 2 * range, 2 * range),
Color.White);
しかし、それは機能しません。私もこれを試しました:
spriteBatch.Begin();
spriteBatch.Draw(shadowmap,
new Rectangle(0, 0, range * 2, range * 2),
new Rectangle((int)screenPos.X - range, (int)screenPos.Y - range, 2 * range, 2 * range),
Color.White);
spriteBatch.End();
graphicsDevice.SetRenderTarget(null);
effect.Parameters["tex"].SetValue(area);
foreach (EffectPass pass in effect.Techniques[0].Passes)
{
pass.Apply();
}
しかし、これも何もしません。テクスチャを2つまたは3つのアルゴリズムパスに渡す必要があるので、シェーダーをテクスチャに任意に適用する方法が必要です。これを行う方法はありますか?
編集:HLSLコードは次のとおりです。
texture tex;
sampler input : tex;
float red;
float2 mousepos;
float4 PixelShaderFunction(float2 coords: TEXCOORD0) : COLOR0
{
float4 color;
color=tex2D(input,coords.xy);
color.r=0.9;
return color;
}
technique Technique1
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}