Развитие игровой вспышки
Текущее время: Пн сен 24, 2018 4:47 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 10:48 am 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 201
подскажите как реализуется данная штука на старлинге. Может кто поделится примером.

Изображение

картинку взял с

http://gmakers.ru/wiki/index.php?title= ... 0%B0%D0%BC

там есть и алгоритм на неком языке, для замены, но я не смог вкурить как это применить у себя в проекте.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 11:33 am 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
Это не замена цвета, а игра с его компонентами. Аналог - цветовая матрица. Все уже сделано за тебя

http://doc.starling-framework.org/v1.7/ ... ilter.html

учти, что фильтры могут сказываться на производительности. Там, где можно сделать это заранее - лучше в рантайме не гонять фильтры.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 12:23 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 201
TheRabbit писал(а):
Это не замена цвета, а игра с его компонентами. Аналог - цветовая матрица. Все уже сделано за тебя

http://doc.starling-framework.org/v1.7/ ... ilter.html

учти, что фильтры могут сказываться на производительности. Там, где можно сделать это заранее - лучше в рантайме не гонять фильтры.
простите потуплю )
ну и как поменять зеленые полоски на желтые, как в примере, используя ColorMatrixFilter?


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 1:12 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
очевидно же - хуем (hue) и сатурейшен. Если посмотришь на картинки свои - там не только один цвет заменен. Там вся палитра смещается.

чтоб прям было 1 в 1 - надо шейдер писать. Это не стандартный подход. Но он не супер сложный


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 1:34 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 201
TheRabbit писал(а):
очевидно же - хуем (hue) и сатурейшен. Если посмотришь на картинки свои - там не только один цвет заменен. Там вся палитра смещается.

чтоб прям было 1 в 1 - надо шейдер писать. Это не стандартный подход. Но он не супер сложный
тема так и называется замена всех оттенков определенного цвета :)
я ссылку как раз про шейдеры кинул, но как их прикрутить не знаю, поэтому и спрашиваю.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 4:25 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср окт 27, 2010 5:27 pm
Сообщений: 510
Тут, скорее всего, используется маска, по которой определяется, смещать цвет или нет. Т.к. задние фонари как были красного цвета, так и остались.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 4:56 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
не не. Я разобрался. Тут куда сложнее. Происходит замена конкретного цвета с учетом его полутонов. Т.е. если на машине сделать малиновую надпись - менять цвет будет только малиновый + все полутона


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 4:57 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 201
Не, там это реализовано шейдером, я процетирую текст из которого я выдрал картинку. просто я не знаю как этот код использовать в старлинге, но знаю что вроде как то можно :)

Цитата:
Замена всех оттенков определённого цвета

Шейдер с заменой цвета по тону с сохранением насыщенности потребует вычисления величины тона (hue), и потом вычисления нового цвета с учётом яркости и насыщенности, поэтому он много сложнее:
Код:
/// glsl_colorize_partial
varying vec2 v_vTexcoord;
varying vec4 v_vColour;

uniform float u_SourceHue;
uniform vec3 u_TargetColor;
uniform float u_Tolerance;
uniform float u_Falloff;

vec3 rgb2hsv ( vec3 color )
{
    vec4 K = vec4 ( 0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0 );
    vec4 p = mix ( vec4 ( color.bg, K.wz ), vec4 ( color.gb, K.xy ), step ( color.b, color.g ) );
    vec4 q = mix ( vec4 ( p.xyw, color.r ), vec4 ( color.r, p.yzx ), step ( p.x, color.r ) );

    float d = q.x - min ( q.w, q.y );
    float e = 1.0e-10;
    return vec3 ( abs ( q.z + ( q.w - q.y ) / ( 6.0 * d + e ) ), d / ( q.x + e ), q.x );
}

void main ( )
{
    gl_FragColor = texture2D ( gm_BaseTexture, v_vTexcoord );
   
    vec3 hsv = rgb2hsv ( gl_FragColor.rgb );
    float saturation = hsv.y;
    vec3 luminance = vec3 ( hsv.z );
   
    float overlap = abs ( hsv.x - u_SourceHue );
    float mix_factor = clamp ( ( u_Tolerance - overlap ) / u_Falloff, 0.0, 1.0 );
    vec4 newcolor = vec4 ( mix ( luminance, u_TargetColor * luminance, mix_factor ), gl_FragColor.a );
   
    gl_FragColor = mix ( gl_FragColor, newcolor, mix_factor );
    gl_FragColor *= v_vColour;
}



Функции преобразования цвета из RGB в HSV (показано далее) и обратно по-честному стырены из интернета, ибо все велосипеды давно изобретены и изобретать с нуля еще один ни к чему (хоть это и полезно). В этом случае функциями попроще (как в предыдущих шейдерах) не обойтись, и использование этих больших и запутанных функций вполне оправдано. Параметры смешивания вычисляются аналогичным образом с предыдущим шейдером; новый цвет, который есть перекрашенный старый также вычисляется аналогично прошлым соответствующим шейдерам. В конце, перекрашенный цвет смешивается с основным в зависимости от того, насколько совпадали исходные тона.
Это аналогично функции редактора спрайтов "Colorize Partial". Это, наверное, наиболее полезный шейдер для перекрашивания. Хотя, как уже было сказано, графику под перекрашивание всё равно надо специально готовить заранее. На спрайте нужно будет найти неиспользуемый тон, и часть для перекрашивания выкрасить разными оттенками этого тона, таким образом, чтобы hue лежал максимально "ровно" по всему диапазону оттенков - чем уже требуется ширина обхвата, тем меньше лишних пикселей будет затронуто. Поскольку шейдер работает на определённых тонах, то в нём можно выделить под перекраску гораздо больше цветов, чем в ранее описанном "трёхцветном" шейдере - как минимум шесть (три основных и три промежуточных) будут хорошо работать, но при этом использовать пересечение цветов перекрашивания нельзя, так как это чревато довольно непредсказуемыми результатами.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 5:31 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
Можно :) Надо писать шейдер.

Проблем с шейдерами во флеше и ейре в том, что шейдер пишется на AGAL. А твой код - GLSL. Почему адоби сделали AGAL? потому, что они работают как с directx, так и с opengl. а там шейдерные язык вроде как другие относительно друг друга. Поэтому сделали универсальный один.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Замена всех оттенков определённого цвета
СообщениеДобавлено: Пн дек 21, 2015 5:36 pm 
Не в сети

Зарегистрирован: Вт апр 01, 2014 10:34 am
Сообщений: 201
нашел вот такую штуку http://adobe.github.io/glsl2agal/

но либо код с ошибкой, либо что то не хватает, но не переводит glsl в agal, но даже если бы перевел, боюсь с реализацией у меня были бы проблемы )


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB