我可以使用BlendState对象来模拟绘画调用的混合颜色吗?

我正在开发基于瓦片的游戏的照明系统。

我想要做的是画我的瓷砖到屏幕上,然后绘制一个单一的Texture2D对象(我的光照贴图)。 但是,这样做的两个步骤导致瓷砖看起来“涂”和洗出来。

为了使这个效果起作用,我调用了Texture2D.GetData() ,然后在每个tile上调用SpriteBatch.Draw()时使用该Color作为混合颜色,这导致它们被正确地“着色”。 这个工作,但它是一个慢一点,并不会扩大对巨大的地图/视图区域。

那么,是否有可能使用BlendState对象来做我在上面做的事情?

  • 瓷砖地图
  • 光映射
  • 应用光照贴图的平铺贴图 (每个瓷砖)

我find了我正在寻找的解决scheme。 由于我的光照贴图使用透明度,我只是简单地使用

 ColorSourceBlend = Blend.Zero; ColorDestinationBlend = Blend.SourceAlpha; ColorBlendFunction = BlendFunction.Add; 

不得不调整一些东西来支持它,但是它效果很好。