2010-08-10 2 views
0

Я борюсь с тем, как интерполировать цвет, учитывая start_time и end_time, start_color и end_color. Для простоты здесь является примером того, как я думаю, делать это только с красной составляющей:Интерполирующий цвет RGB

start_time = 0 
end_time = 1 
start_color = F //base 16 ftw 
end_color = 0 

Я могу видеть, как во время .5, red_out должно быть 8. Это будет в середине выцветанию от от ярко-красного до черного.

Значит, это time_elapsed * start_color? Но тогда, что, если он угасает по-другому, от черного до ярко-красного? Здесь я смущаюсь.

+0

Хорошо, все. var red_out = time_alive * (pArray [i] .pEndColorRed - pArray [i] .pStartColorRed)/(теперь - pArray [i] .pStarttime) .toString (16); – jason

+0

тьфу, и это официально уродливых строка кода Ive everwrote лол

вар red_out = (Math.abs (ParseInt ((time_alive * (PArray [я] .pEndColorRed - PArray [я] .pStartColorRed)/(pArray [i] .pLifespan))))). toString (16); – jason

+0

@lincolnk: новый здесь сделаю – jason

ответ

1

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

color = time_elapsed * (end_color - start_color)/(end_time - star_time) 
1

Другой путь кажется достаточно простым, если вы думаете, что во время t (где т в диапазоне от 0 до 1) , значение канала:

start + t * (end - start) 

таким образом, если конечное значение является меньше начальное значение (например, в красный -> черный корпус), положение end - start имеет отрицательное значение, так как время увеличивает стоимость уменьшает по мере необходимости.

Это также видеть, что в крайних случаях,

t = 0 => start + 0 = start 
t = 1 => start + (end - start) = end 

по мере необходимости.

Редактировать: Приятная вещь в этом представлении заключается в том, что он дает понять, как изменить скорость распада. Пока значение для t начинается с 0 и в конечном итоге достигает 1, его необязательно необходимо модифицировать линейно. Например, если вы хотите, чтобы интерполяция начиналась медленно и ускорялась до конца, вы могли бы вместо этого использовать t .

1
interpolated_color_component = (current_time - start_time)/(end_time - start_time) * (end_color_component - start_color_component) + start_color_component 
Смежные вопросы