【问题标题】:2D Passes.apply() XNA 4.02D Passes.apply() XNA 4.0
【发布时间】:2012-06-30 13:46:00
【问题描述】:


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

提前致谢,拉斯穆斯:]

【问题讨论】:

    标签: c# xna xna-4.0 hlsl


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多