我想在全球范围内控制2D SpriteBatch渲染图形集的环境光照。我意识到我可以通过混合传递给SpriteBatch.Draw的颜色来做到这一点,但我宁愿全局地这样做。
BasicEffect着色器在XNA中为简单场景控制固定功能管道样式照明。
BasicEffect着色器和SpriteBatch的着色器是否不兼容? 有人有这些合作吗?
答案 0 :(得分:2)
这不是您问题的直接答案,但可能会对您有所帮助。 BasicEffect和SpriteBatch对象只是XNA团队与发行版捆绑在一起的着色器。
这些着色器的源代码可供您根据自己的喜好进行查看/修改。使用自己的着色器可以防止您不断遇到障碍。
在这里您可以找到更多信息和源代码: blogs.msdn.com
答案 1 :(得分:2)
我也有这个问题而且“他们不相容”是错误的。 spriteBatch改变了图形设备上的“DepthStencilState”和“BlendState”。要解决这个问题,请在spriteBatch.End。
之后添加GraphicsDevice.DepthStencilState = DepthStencilState.Default;
spriteBatch将DepthStencilState更改为None,这就是3D对象无法正确绘制的原因。其他属性也发生了变化。看看这些:
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;
答案 2 :(得分:0)
据我所知,sprite批处理在将其四边形渲染到屏幕时会在内部使用它自己的效果,因为你当时只能渲染一种效果,我的答案是否定的,它们是不兼容的。 / p>
答案 3 :(得分:0)
是的,它们不相容。
这是因为spritebatch使用自己的自定义顶点着色器来进行四重渲染。您可以使用自己的自定义像素着色器,xna创建者的俱乐部教育网站上有一个示例,向您展示如何使用spritebatch自定义像素着色器效果。