Интерполяция цвета RGB - PullRequest
       9

Интерполяция цвета RGB

0 голосов
/ 10 августа 2010

Я борюсь с тем, как интерполировать цвет, учитывая 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?Но тогда что, если он исчезает в обратном направлении, от черного до ярко-красного?Здесь я запутался.

Ответы [ 3 ]

1 голос
/ 10 августа 2010

Другой способ кажется достаточно простым, если вы думаете, что в момент времени 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 .

1 голос
/ 10 августа 2010
interpolated_color_component = (current_time - start_time) / (end_time - start_time) * (end_color_component - start_color_component) + start_color_component
1 голос
/ 10 августа 2010

для каждого компонента цвета вы должны использовать следующую формулу (ничего магического):

color = time_elapsed * (end_color - start_color) / (end_time - star_time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...