首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#/HLSL & XNA -在HLSL中通过百分比将两种颜色混合在一起

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

Stack Overflow用户
提问于 2012-03-26 01:41:33
回答 1查看 4.5K关注 0票数 2

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-26 18:12:53

您需要使用lerp函数(MSDN.这就是“线性插值”函数。

像素着色器中的颜色本质上与向量相同,因此可以对其使用任何向量函数。

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

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

代码语言:javascript
复制
_in.color = lerp(_in.color, someOtherColor, fogAmount);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9862439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档