我目前正在为我的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:]
答案 0 :(得分:3)
您无法同时使用多个效果传球进行绘制。相反,你需要多次绘制相同的东西,将结果组合在一起。
作为一个例子,想象一下用3种效果模拟照明:环境光,漫射光和镜面光。这些中的每一个都将由效果传递表示。你可以按顺序渲染它们,加法将结果组合在一起(就像光加在一起一样)。
如果要组合多种效果,则需要手动指定它们的组合方式。你通常会通过循环你想要使用的效果传递,并一次应用一个,在每次迭代中绘制你的场景来做到这一点。