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?
谢谢,拉斯穆斯:]
您不能同时进行多次效果绘制。相反,您需要多次绘制同一件事,将结果组合在一起。
例如,假设模拟具有三种效果的照明:环境光,漫射光和镜面光。这些中的每一个都将通过效果传递来表示。您将按顺序渲染它们,将结果加在一起组合在一起(就像将光加在一起一样)。
如果要组合多个效果,则需要手动指定它们的组合方式。通常,您可以通过遍历要使用的效果通道,然后一次应用一次,并在每次迭代中绘制场景来做到这一点。