2D Passes.apply()XNA 4.0

时间:2012-06-30 13:46:01

标签: 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
    {
        PixelShader = compile ps_2_0 PSFunction();
    }
}

当我使用以下参数开始我的SpriteBatch时,它正常工作:

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

然而; SpriteBatch.Begin方法不接受多种效果。所以我试着做了

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

之前打电话

SpriteBatch.Begin();

但没有任何事情发生,因此我尝试了几种diffrend方法。如

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

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

先谢谢,Rasmus:]

1 个答案:

答案 0 :(得分:3)

您无法同时使用多个效果传球进行绘制。相反,你需要多次绘制相同的东西,将结果组合在一起。

作为一个例子,想象一下用3种效果模拟照明:环境光,漫射光和镜面光。这些中的每一个都将由效果传递表示。你可以按顺序渲染它们,加法将结果组合在一起(就像光加在一起一样)。

如果要组合多种效果,则需要手动指定它们的组合方式。你通常会通过循环你想要使用的效果传递,并一次应用一个,在每次迭代中绘制你的场景来做到这一点。