我想建立一个基于着色器的照明系统。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();
}
但这也无济于事。我需要通过两个/三个算法传递纹理,所以我需要一种将着色器任意应用于纹理的方法。有没有办法做到这一点?
编辑: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();
}
}