我需要在颜色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。
感谢。
答案 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)