我正在我的效果文件中创建一个雾特征..在像素着色器中,我计算距相机位置和输入位置的距离,如下所示:
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:我注意到有两个透明层有一个透明的结果,所以我清理了一下这个问题。顶点输入没有百分比。
发布于 2012-03-26 18:12:53
您需要使用lerp函数(MSDN.这就是“线性插值”函数。
像素着色器中的颜色本质上与向量相同,因此可以对其使用任何向量函数。
lerp函数采用0到1之间的值,而不是百分比(在0到100的范围内)。
因此,您的代码可能如下所示:
_in.color = lerp(_in.color, someOtherColor, fogAmount);https://stackoverflow.com/questions/9862439
复制相似问题