1

我需要在颜色 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。

谢谢。

4

1 回答 1

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)
于 2013-01-14T12:25:22.603 回答