Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 2D passs.apply()XNA 4.0_C#_Xna_Xna 4.0_Hlsl - Fatal编程技术网

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种效果模拟照明:环境光、漫反射光和镜面反射光。其中每一个都将由一个效果过程表示。您将按顺序渲染它们,并将结果相加(就像灯光相加一样)


如果要组合多个效果,则需要手动指定如何组合这些效果。通常,您可以通过循环使用想要使用的效果过程来实现这一点,然后一次应用一个效果过程,在每次迭代中绘制场景。

我想补充一点,这项技术被称为。