【发布时间】:2012-08-30 22:14:22
【问题描述】:
我想建立一个基于着色器的光照系统。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();
}
}
【问题讨论】:
-
您似乎发布了错误的链接。您可以编辑您的帖子或将其添加为评论吗?