2


我目前正在为我的 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?

在此先感谢,拉斯穆斯:]

4

1 回答 1

3

您不能同时使用多个效果通道进行绘制。相反,您需要多次绘制相同的东西,将结果组合在一起。

例如,想象一下模拟具有 3 种效果的照明:环境光、漫反射光和镜面反射光。这些中的每一个都将由一个效果通道表示。您将按顺序渲染它们,将结果相加组合在一起(就像光相加一样)。

如果要组合多个效果,则需要手动指定它们的组合方式。您通常会通过循环遍历您想要使用的效果通道来执行此操作,并一次应用一个,在每次迭代时绘制您的场景。

于 2012-06-30T14:16:03.273 回答