C#/ HLSL& XNA - 在HLSL中通过百分比将2种颜色混合在一起

时间:2012-03-25 17:41:33

标签: c# colors xna hlsl fog

我在效果文件中创建了一个雾特征..在像素着色器中,我计算了相机位置和输入位置的距离,如下所示:

    float x = distance(_in.pos3d, CameraPosition);
float fd;
if(Fog)
{
    if(x > FogDistance)
        fd = ((x-FogDistance) * FogIntensity > 100) ? 100 : ((x-FogDistance) * FogIntensity);
    //_in.color = ???;
}

其中: x是相机位置和顶点位置的距离, fd是雾色的百分比, FogDistance是物体不受雾影响的距离,和 FogIntensity是雾的浓度。

我想要的是一种含有(fd%)雾色的颜色。例如,如果雾颜色为橙色,则输入为白色,fd为25%,生成的颜色为白色+ 25%橙色。

编辑:顺便说一句,抱歉不可维护的设置代码。

编辑2:我注意到有两个透明层有一个透明的结果,所以我稍微清理了一下这个问题。顶点输入没有百分比。

1 个答案:

答案 0 :(得分:3)

您需要lerp功能(MSDN)。那就是“线性插值”函数。

像素着色器中的颜色与矢量基本相同,因此您可以在它们上使用任何矢量函数。

lerp函数取0到1之间的值,而不是百分比(在0到100范围内)。

因此,您的代码可能如下所示:

_in.color = lerp(_in.color, someOtherColor, fogAmount);