4

我想在全局范围内控制 2D SpriteBatch 渲染图形集的环境照明。我意识到我可以通过混合传入 SpriteBatch.Draw 的颜色来做到这一点,但我宁愿在全球范围内这样做。

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

BasicEffect 着色器和 SpriteBatch 的着色器不兼容吗?有没有人让这些一起工作?

4

4 回答 4

2

这不是您问题的直接答案,但可能对您有用。BasicEffect 和 SpriteBatch 对象只是 XNA 团队与该版本捆绑在一起的着色器。

这些着色器的源代码可供您根据自己的喜好查看/修改。做你自己的着色器可以防止你不断地遇到障碍。

您可以在此处找到更多信息和源代码: blogs.msdn.com

于 2009-07-25T01:41:37.647 回答
2

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

GraphicsDevice.DepthStencilState = DepthStencilState.Default;

spriteBatch 将 DepthStencilState 更改为 None,这就是 3D 对象无法正确绘制的原因。其他属性也会发生变化。检查这些:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
于 2011-10-10T21:28:49.010 回答
0

据我所知,精灵批处理在将四边形渲染到屏幕时在内部使用它自己的效果,因为您当时只能使用一种效果进行渲染,我的回答是否定的,它们不兼容。

于 2009-10-30T17:13:30.647 回答
0

是的,它们不兼容。

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

于 2009-12-09T22:31:04.417 回答