C# XNA 4.0中2d照明着色器中的alpha存在问题

C# XNA 4.0中2d照明着色器中的alpha存在问题,c#,xna,shader,hlsl,C#,Xna,Shader,Hlsl,我目前正在学习使用XNA的HLSL,我想在教程结束后最好从一些简单的2D着色器开始。我正在尝试在2D中实现一个简单的照明着色器 我将不带阴影的场景绘制到渲染目标,将渲染目标交换到阴影贴图,通过alpha通道将灯光(每个单独)绘制到阴影贴图上,将渲染目标交换回默认值,然后渲染场景,然后渲染顶部的阴影 灯光的alpha根据当前像素和灯光点的距离而变化,这对我来说都很好,但渲染场景时除外,如果两个灯光重叠,则会导致严重的混合问题 在阴影贴图上绘制以及在场景中绘制阴影贴图时,我使用alphablend

我目前正在学习使用XNA的HLSL,我想在教程结束后最好从一些简单的2D着色器开始。我正在尝试在2D中实现一个简单的照明着色器

我将不带阴影的场景绘制到渲染目标,将渲染目标交换到阴影贴图,通过alpha通道将灯光(每个单独)绘制到阴影贴图上,将渲染目标交换回默认值,然后渲染场景,然后渲染顶部的阴影

灯光的alpha根据当前像素和灯光点的距离而变化,这对我来说都很好,但渲染场景时除外,如果两个灯光重叠,则会导致严重的混合问题

在阴影贴图上绘制以及在场景中绘制阴影贴图时,我使用alphablend。 我只是使用了错误的混合设置吗?我不太了解混合状态


如果问题不明确,很抱歉。

我以前在做软件照明时遇到过这种情况,当你的值超过255(或1.0)时,你会回到黑暗的领域。我相信这些值是使用模运算进行钳制的,导致1.1为0.1或256为1。我注意到黑色椭圆实际上是两个球体边的组合,这就是给我这个结论的原因

希望这能让你更接近理解和发现你的问题。我不知道您已经在使用什么代码,但在您的HLSL技术过程中,您可以尝试添加:

AlphaBlendEnable = true;  
SrcBlend = One;
DestBlend = One;
问题很清楚;)也许你可以发布一些相关的代码?