我在效果文件中创建了一个雾特征..在像素着色器中,我计算了相机位置和输入位置的距离,如下所示:
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:我注意到有两个透明层有一个透明的结果,所以我稍微清理了一下这个问题。顶点输入没有百分比。
答案 0 :(得分:3)
您需要lerp
功能(MSDN)。那就是“线性插值”函数。
像素着色器中的颜色与矢量基本相同,因此您可以在它们上使用任何矢量函数。
lerp
函数取0到1之间的值,而不是百分比(在0到100范围内)。
因此,您的代码可能如下所示:
_in.color = lerp(_in.color, someOtherColor, fogAmount);