Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XNA Alpha与原语和精灵混合_Xna_Sprite_Alpha_Primitive_Alphablending - Fatal编程技术网

XNA Alpha与原语和精灵混合

XNA Alpha与原语和精灵混合,xna,sprite,alpha,primitive,alphablending,Xna,Sprite,Alpha,Primitive,Alphablending,我已经使用XNA有一段时间了,我非常喜欢使用它的界面。现在我们正试图制造一个“战争迷雾”系统。我们正在制作一个RTS,我们基本上是在试图模糊地图。地图上的单位具有影响力,并显示正在发生的事情。它们显示了地图上的一个特定区域。以前我们使用了基于瓷砖的界面,但我们对其外观不满意。相反,我们决定在屏幕上绘制一个黑色遮罩,然后显示一个带有DrawUserPrimitives的透明圆。问题是:当我们在屏幕上画一个黑色的遮罩,然后是透明的圆圈时,屏幕是完全黑色的。颠倒顺序也不会改变任何事情。我们还尝试了我们

我已经使用XNA有一段时间了,我非常喜欢使用它的界面。现在我们正试图制造一个“战争迷雾”系统。我们正在制作一个RTS,我们基本上是在试图模糊地图。地图上的单位具有影响力,并显示正在发生的事情。它们显示了地图上的一个特定区域。以前我们使用了基于瓷砖的界面,但我们对其外观不满意。相反,我们决定在屏幕上绘制一个黑色遮罩,然后显示一个带有DrawUserPrimitives的透明圆。问题是:当我们在屏幕上画一个黑色的遮罩,然后是透明的圆圈时,屏幕是完全黑色的。颠倒顺序也不会改变任何事情。我们还尝试了我们能找到的每一种SpriteBatch BlendState

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

我们期望的结果: 画圆圈将显示屏幕的一部分,但保持其余部分模糊。我们可以画多个圆,每个圆都有自己的半径,它们可以彼此靠近而不会引起问题

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

问候


Ares

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


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

非常感谢!我会投票给你,但在我有15个代表之前我不能这么做:)