c# - XNA 4.0 中 2d 光照着色器中的 alpha 问题

标签 c# xna shader hlsl

我目前正在使用 XNA 学习 HLSL,我认为教程之后最好的起点是一些简单的 2D 着色器。我正在尝试在 2D 中实现一个简单的光照着色器。

我将没有阴影的场景绘制到 rendertarget,将我的 rendertarget 交换到 shadowmap,通过 alpha channel 将我的光(每个单独)绘制到 shadowmap 上,将我的 rendertarget 交换回默认值并渲染场景,然后在顶部渲染阴影。

光的 alpha 根据当前像素和光点的距离而变化,这对我来说一切正常,除非我渲染场景时,如果两个光重叠会导致严重的混合问题。

the problem

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

抱歉,如果问题含糊不清。

最佳答案

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

希望这能让您更深入地了解和找出您的问题。我不知道你已经在使用什么代码,但在你的 HLSL 技术过程中你可以尝试添加:

AlphaBlendEnable = true;  
SrcBlend = One;
DestBlend = One;

关于c# - XNA 4.0 中 2d 光照着色器中的 alpha 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004945/

相关文章:

c# - 我如何计算矢量的反面,增加一些松弛

wpf - WPF 中的环境遮挡着色器效果?

c# - 如何让 URL 客户端来自反向代理?

javascript - ASP.NET 将复选框值获取到 C# 方法

c# - 如何在 C# 中创建真人快打游戏?

c++ - 我应该在哪里保存我的着色器代码?

opengl - 这个简单的FxAA如何工作?

Android glShaderBinary

c# - 使用 C# 将用户添加到 Oracle LDAP 组

c# - 如何创建属性以检查用户是否拥有 Identity core 2.2 的声明?