关于c#:2D Passes.apply()XNA 4.0

2D Passes.apply() XNA 4.0

我目前正在为XNA游戏学习效果文件的语言" HLSL"。然而;我遇到了将效果应用于我的SpriteBatch的问题。
我的效果文件看起来像这样,并使渲染的纹理为白色。 :]

1
2
3
4
5
6
7
8
9
10
11
12
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时,它应能正常工作:

1
SpriteBatch.Begin(0, null, null, null, null, SampleEffect);

但是; SpriteBatch.Begin方法不接受多个效果。因此,我尝试做

1
SampleEffect.CurrentTechnique.Passes[0].Apply();

在调用

之前

1
SpriteBatch.Begin();

但是什么也没发生,因此我尝试了几种不同的方法。如

1
SampleEffect.CurrentTechnique.Passes["pass0"].Apply();

但是它仍然没有用。
因此,我验证了使用object.ReferenceEquals函数将效果附加到了正确的GraphicsDevice上,但它等于正确的graphicsDevice。
我究竟做错了什么?如何将多个效果附加到SpriteBatch?

谢谢,拉斯穆斯:]


您不能同时进行多次效果绘制。相反,您需要多次绘制同一件事,将结果组合在一起。

例如,假设模拟具有三种效果的照明:环境光,漫射光和镜面光。这些中的每一个都将通过效果传递来表示。您将按顺序渲染它们,将结果加在一起组合在一起(就像将光加在一起一样)。

如果要组合多个效果,则需要手动指定它们的组合方式。通常,您可以通过遍历要使用的效果通道,然后一次应用一次,并在每次迭代中绘制场景来做到这一点。