C# 2D passs.apply()XNA 4.0
C# 2D passs.apply()XNA 4.0,c#,xna,xna-4.0,hlsl,C#,Xna,Xna 4.0,Hlsl,我目前正在学习XNA游戏效果文件的语言“HLSL”。然而;我遇到了将效果应用于SpriteBatch的问题。 我的效果文件如下所示,并使渲染纹理为白色。:] float4 PSFunction(float2 coord : TEXCOORD0) : COLOR0 { return float4(0, 0, 0, 1); // Return a white pixel } technique Sample { pass pass0 { PixelShade
我目前正在学习XNA游戏效果文件的语言“HLSL”。然而;我遇到了将效果应用于SpriteBatch的问题。
我的效果文件如下所示,并使渲染纹理为白色。:]
float4 PSFunction(float2 coord : TEXCOORD0) : COLOR0
{
return float4(0, 0, 0, 1); // Return a white pixel
}
technique Sample
{
pass pass0
{
PixelShader = compile ps_2_0 PSFunction();
}
}
当我用以下参数开始我的SpriteBatch时,它正常工作:
SpriteBatch.Begin(0, null, null, null, null, SampleEffect);
但是,;SpriteBatch.Begin方法不接受多重效果。所以我试着去做
SampleEffect.CurrentTechnique.Passes[0].Apply();
打电话之前
SpriteBatch.Begin();
但是什么也没发生,所以我尝试了几种不同的方法。比如
SampleEffect.CurrentTechnique.Passes["pass0"].Apply();
但它仍然不起作用。
因此,我使用object.ReferenceEquals函数验证了效果是否附加到了正确的GraphicsDevice,但它与正确的GraphicsDevice相等。
我做错了什么?如何将多个效果附加到SpriteBatch
提前感谢,拉斯姆斯:您不能同时绘制多个效果过程。相反,您需要多次绘制同一事物,将结果组合在一起 作为一个示例,请想象使用3种效果模拟照明:环境光、漫反射光和镜面反射光。其中每一个都将由一个效果过程表示。您将按顺序渲染它们,并将结果相加(就像灯光相加一样)
如果要组合多个效果,则需要手动指定如何组合这些效果。通常,您可以通过循环使用想要使用的效果过程来实现这一点,然后一次应用一个效果过程,在每次迭代中绘制场景。我想补充一点,这项技术被称为。