我正在努力解决如何插入颜色,给定start_time
和end_time
,start_color
和end_color
。为简单起见,这里有一个例子,说明我只想用红色组件来做这件事:
start_time = 0
end_time = 1
start_color = F //base 16 ftw
end_color = 0
我可以看到时间.5,red_out
应该是8.这将是从亮红色变为黑色的中途。
它是time_elapsed * start_color
吗?但是如果它从另一个方向逐渐消失,从黑色变为鲜红色呢?这是我感到困惑的地方。
答案 0 :(得分:1)
对于每个颜色组件,您必须使用以下公式(没有什么神奇的):
color = time_elapsed * (end_color - start_color) / (end_time - star_time)
答案 1 :(得分:1)
另一种方式似乎很简单,如果您认为在时间t
(其中t的范围从0到1),则通道的值为:
start + t * (end - start)
这样,如果结束值小于起始值(如红色 - >黑色情况),则end - start
子句为负,因此随着时间的增加值根据需要减少。
在边缘情况下,也可以看到
t = 0 => start + 0 = start
t = 1 => start + (end - start) = end
根据需要。
编辑:关于这种表示的好处在于它清楚地说明了如何修改衰减率。只要t
的值从0开始并最终达到1,它就不一定必须线性修改。例如,如果您希望插值开始缓慢并加速到最后,则可以使用t 2 。
答案 2 :(得分:1)
interpolated_color_component = (current_time - start_time) / (end_time - start_time) * (end_color_component - start_color_component) + start_color_component