2

我正在我的效果文件中创建雾功能.. 在像素着色器中,我计算与相机位置和输入位置的距离,如下所示:

    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:我注意到有两个透明层有一个透明的结果,所以我稍微清理了这个问题。顶点输入没有百分比。

4

1 回答 1

5

你想要这个lerp功能(MSDN)。那就是“线性插值”功能。

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

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

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

_in.color = lerp(_in.color, someOtherColor, fogAmount);
于 2012-03-26T10:12:52.890 回答