народ нужно помощь в поиски шейдера или создании, а так же его внедрении…
думаю нужен шейдер который отрисовывая спрайт на сурфейс сравнит пиксили в области пересечения и отрисует тот что светлее.
пробовал решить заменой белой прозрачности на чёрную и подбором blend мода, но не вышло…
так как возникают дыры или цвет не соответствует обычной отрисовке.
- 13 октября 2019, 20:30
- 00
Есть пример, как это должно выглядеть?
На GLSL пойдет?
думаю да вопрос какая версия )
3.3 пойдет?
уже давно выслал бы и проверил)
(смысли скорее всего да просто нужно знать версию так как видимо есть какие-то сильные различия между актуальной и старой версией)
Вот как-то так. Код не тестировал.
uv - координаты текстуры
tex1 - первая текстура
tex2 - вторая текстура
luma - функция вычисления яркости
(пожалуй виноват... так как я его подключать замучаюсь -_- а с блендами всё ясно Ы!)
не... поспешил я...
что то я не понимю нифига... болезненно использование шейдеров этих -_-
кроче не выходит у меня его в писать -_-
uniform sampler2D - это текстура, вход
fragColor - цвет пикселя, выход
угу... получаю ошибку wrong shaider -_-
Не, ну ты прочитай документацию в своём движке, как правильно делать входы с выходами, это везде по-разному, хоть и названо GLSL
да оно понятно... вот тока у меня ситуация: смотрю в книгу, вижу фигу х)
типо вроде все правильно но, на самом деле совершенно нет)
Сделай сначала обычный шейдер, который, например, обнуляет синий и зеленый канал, а красный оставляет как есть. Подключи, отрисуй картинку и убедись что работает.
Затем напиши шейдер, к-й работает с сурфейсом, который на месте пересечения спрайта с сурфейсом рисует красные пиксели (255;0;0;255). Затем, когда заработает - меняй этот шейдер так, чтобы делал то что тебе надо.
А вообще, по моему опыту - не знаешь как это делается и не удается быстро найти тривиальное решение - забей и не делай. Слишком много времени потеряешь. Делай то, что ты уже умеешь и знаешь как делать.
Учиться новым фокусам лучше между конкурсами, на прототипах.
ну... я по сути так и делаю... к сожалению жалко времени на очередное изучение данного вопроса х)
Вот так вроде должно сработать.
Если я правильно понял задачу, это делается без шейдера, функцией draw_set_blend_mode с параметром bm_max.
(после отрисовки всего нужного, надо сделать draw_set_blend_mode(bm_normal), чтобы отрисовка снова стала нормальной)
Например, вот так в этом режиме смешивания выглядит последовательная отрисовка ярко-красного квадрата, а затем поверх него более тёмного, пиксели всё равно остаются от более яркого квадрата:
На всякий случай, код:
draw_sprite_ext(sSquare, 0, 0, 0, 1, 1, 0, c_red, 1);
draw_set_blend_mode(bm_max);
draw_sprite_ext(sSquare, 0, 96, 0, 1, 1, 0, make_colour_rgb(100,0,0), 1);
draw_set_blend_mode(bm_normal);
проблема в том что все бленд моды почему-то так-же накладывают и прозрачность. а бм мах в том числе и высвечивает гамму что не приемлимо...
есть конечно подходящий бм но он делает дыры в местах пересечения прозрачной части и не прозрачной
хмм ща попробую переменить задний фон на чёрный прозрачный, и возможно заморока с шейдером не понадобится(хотя есть ощущение что он был бы экономнее)
нда... короче сработала смена фона... как это конечно глупо...