XNA Alpha与原始和精灵混合

时间:2013-03-21 20:04:21

标签: xna sprite alpha primitive alphablending

我已经使用XNA一段时间了,我真的很喜欢使用它的界面。现在我们正试图制造一个“战争迷雾”系统。我们正在制作一个RTS,我们基本上试图模糊地图。地图上的单位具有影响力,并显示正在发生的事情。他们揭示了地图上的特定区域。以前我们使用基于磁贴的界面,但我们对外观不满意。相反,我们决定在屏幕上绘制一个黑色蒙版,然后使用DrawUserPrimitives显示一个透明圆圈。问题在于:当我们在屏幕上绘制黑色蒙版,然后是透明圆圈时,屏幕完全是黑色的。撤销订单也不会改变任何事情。我们还尝试了我们可以找到的每个SpriteBatch BlendState。

我们目前的方法: 现在,我们在屏幕上绘制一个完整的黑色纹理,然后绘制一个透明的圆圈。结果是一个完全黑屏。

我们期望的结果: 绘制圆圈将显示屏幕的一部分,但保持其余部分模糊。我们可以绘制多个圆圈,所有圆圈都有自己的半径,这些圆圈可能彼此靠近而不会造成问题。

基本上,我们试图画一个黑色面具,但显示部分屏幕。我们不能只制作圆形纹理并使边缘透明,因为我们试图使圆的中心透明。我们不能使中心透明,因为当两个这样的纹理彼此靠近时,它们的边界就会显现出来。我将如何制作面具,然后展示它的部分?

此致

战神

1 个答案:

答案 0 :(得分:1)

您可以将图形正常渲染到一个渲染目标,然后在另一个渲染目标的黑色背景上绘制白色的可见区域,然后使用Min BlendFunction将第二个渲染到第一个渲染目标。

或者,仅使用一个渲染目标,正常绘制图形,然后清除Alpha通道(通过在整个屏幕上绘制矩形,ColorWriteChannels = Alpha和alpha混合因子均为0),然后使用ColorWriteChannels =绘制可见区域仅限Alpha。