插入三种颜色

时间:2013-01-14 07:41:38

标签: colors shader

我需要在颜色A和B之间进行线性插值,以便在t = .1时颜色为0.5A + 0.5B。我怎样才能做到这一点?

我需要在着色器中使用它,因此条件语句不是一个选项,因为分支可能会变得很慢。我需要以表达式形式提供解决方案。

这是我的解决方案,这很慢:

fixed3 color1= lerp(colorA, colorB, (1.0 - t) * .5 );
fixed3 borderColor= lerp(colorA, colorB, (1.0 - .1) * .5);
fixed3 color2= lerp(colorA, borderColor, t * 10.0 );

finalColor = lerp(color2, color1, saturate( (t - .1) * 100000.0) );

最后一个lerp是确保插值为0或1。

感谢。

1 个答案:

答案 0 :(得分:1)

我将专注于你问题的第一行:两个颜色值或颜色矢量之间的线性插值。

您可以定义标记插值中间点的任意时间点:

tm = 0.1

要计算颜色向量 C(t),您还需要定义开始时间t1或结束时间t2,或两者:

t1 = t2 - 2*(t2-tm) = 2*tm - t2
t2 = t1 + 2*(tm-t1) = 2*tm - t1

要在颜色 A 到颜色 B 之间进行转换,您可以像这样计算颜色分量:

C = A + (B - A) * (t - t1) / (t2 - t1)