XNA的SpriteBatch和BasicEffect不兼容?

4

我希望能够在全局范围内控制2D SpriteBatch渲染的一组图形的环境光照。我知道可以通过混合传递到SpriteBatch.Draw中的颜色来实现这一点,但我更愿意在全局范围内进行控制。

BasicEffect着色器可控制XNA中简单场景的固定功能管线样式照明。

BasicEffect着色器和SpriteBatch的着色器是否不兼容?有人将它们成功地结合使用过吗?

4个回答

2
我也遇到了这个问题,“它们不兼容”是错误的。spriteBatch会更改图形设备上的“DepthStencilState”和“BlendState”等内容。为了解决这个问题,请在spriteBatch.End之后添加以下代码。
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

spriteBatch会将DepthStencilState更改为无,因此3D对象无法正确绘制。其他属性也会被更改。请检查以下内容:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;

2
这并不是针对你问题的直接回答,但可能会对你有所帮助。BasicEffect和SpriteBatch对象只是XNA团队与发行版捆绑在一起的着色器。
这些着色器的源代码可供您查看/修改,以满足您的需求。自己编写着色器将使您避免持续遇到障碍。
以下是更多信息和源代码的来源: blogs.msdn.com

太棒了!我不知道微软发布了源代码。 - tooshel

0

是的,它们不兼容。

这是因为spritebatch必须使用自己的定制顶点着色器来进行四边形渲染。您可以使用自己的自定义像素着色器,并且在xna creator's club教育网站上有一个示例,向您展示如何使用自定义像素着色器效果与spritebatch一起使用。


0
据我所知,精灵批处理在将其四边形渲染到屏幕上时会使用自己的效果。由于一次只能使用一个效果进行渲染,所以我的答案是否定的,它们不兼容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接