|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+1.4 08.02.14]
|
Графическое отображение интенсивности
Добрый день, коллеги!
В общем случае нужно в зависимости от значения некоторой переменной подобрать характерный цвет. Возникла следующая задача: Имеется двумерный массив. Каждый элемент такого массива содержит два элемента - координату и интенсивность звука в этой координате. Зная амплитуду интенсивности (Какое максимальное и минимальное значение среди всех интенсивностей), нужно подобрать к точке цвет. Вот примерно то, что должно получатся (Для понятности)
__________________
trace("Я нуб"); |
|
|||||
Представьте себе цвет как комплекс трёх параметров - красный, зелёный и синий(RGB).
Один цвет хранится в четырёх байтах, последний из которых обычно пустой при отсутствии transparency(прозрачности). Чтобы получить из цвета компоненты, необходимо использовать битовые сдвиги. var color:uint = 0x0F41AC; var rgb:Object = {}; rgb.red = color >> 16 & 0xFF; //сдвигаем на 2 байта, чтобы остался только первый байт(2 байта обрезаются) rgb.green = color >> 8 & 0xFF; //сдвигаем на 1 байт, чтобы остались только 2 первых байта, и обрезаем побитовым И rgb.blue = color & 0xFF; //обрезаем и остаётся только последний байт var rebuiltColor:uint = ((rgb.red << 16) | (rgb.green << 8) | rgb.blue) & 0xFFFFFF; //так собираем компоненты назад. Воспользоваться можно любой из интерполяций, линейная - самая быстрая. public static function interpolate(a:Number, b:Number, x:Number, z:Number = 0, c:Number = 0):Number { switch (interpolation) { case LINEAR: return a * (1 - x) + b * x; break; case COSINE: var ft:Number = x * 3.1415927; var f:Number = (1 - Math.cos(ft)) * .5; return a * (1 - f) + b * f; break; case CUBIC: var P:Number = (c - b) - (z - a); var Q:Number = (z - a) - P; var R:Number = b - z; var S:Number = a; return P*x*x*x + Q*x*x + R*x + S; break; } return 1; }
__________________
There is no thing in this world that is not simple. Последний раз редактировалось ZackMercury; 13.06.2016 в 18:56. |
|
|||||
Удобнее всего это будет сделать через шейдер.
Сперва рассчитываете громкость в каждом конкретном пикселе, от 0 до 1. Затем просто делаете выборку из одномерной текстуры с цветом.
__________________
Дети не должны знать о своих родителях |
Часовой пояс GMT +4, время: 08:56. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|