2009-07-24 104 views
3

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

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

BasicEffect着色器和SpriteBatch的着色器是否不兼容? 有没有人得到这些一起工作?

回答

0

是的,它们不兼容。

这是因为spritebatch sas使用自己的自定义顶点着色器来执行四重渲染。您可以使用自己的自定义像素着色器,并在xna创建者俱乐部教育网站上有一个示例,向您展示如何使用spritebatch自定义像素着色器效果。

2

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

这些着色器的源代码可供您查看/修改您的喜好。做你自己的着色器会让你不断遇到障碍。

在这里你可以找到更多的信息和源代码: blogs.msdn.com

+0

伟大的联系!我不知道MS发布的消息来源。 – tooshel 2011-10-07 21:57:59

0

据我所知,精灵批量使用它自己的作用内部再现它的四边形屏幕的时候,你可以只渲染当时有一个效果,我的答案是否定的,它们不兼容。

2

我也有这个问题,“他们不兼容”是错误的。 spriteBatch改变图形设备上的“DepthStencilState”和“BlendState”之类的东西。要解决这个问题,请在spriteBatch.End之后添加。

GraphicsDevice.DepthStencilState = DepthStencilState.Default; 

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

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