我目前正在使用 XNA 学习 HLSL,我认为教程之后最好的起点是一些简单的 2D 着色器。我正在尝试在 2D 中实现一个简单的光照着色器。
我将没有阴影的场景绘制到 rendertarget,将我的 rendertarget 交换到 shadowmap,通过 alpha channel 将我的光(每个单独)绘制到 shadowmap 上,将我的 rendertarget 交换回默认值并渲染场景,然后在顶部渲染阴影。
光的 alpha 根据当前像素和光点的距离而变化,这对我来说一切正常,除非我渲染场景时,如果两个光重叠会导致严重的混合问题。
我在阴影贴图上绘制时以及在场景中绘制阴影贴图时都在使用 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/