[cocos2d-x][shaders] Шейдер маски для фрагментов текстур
И так, суть проблемы:
необходимо применить маску к фрагменту изображения, при этом сама маска - тоже фрагмент изображения. Иными словами есть два изображения: большая картинка, и атлас с различными масками. Проблемы с наложением маски для отдельных целых текстур нет, просто передам в шейдер вторую текстуру и в фрагментном шейдере объединяем цвет из первой текстуры с альфой из второй текстуры. Выборка из обоих текстур ведётся по одним текстурным координатам. Ход моих мыслей такой: нужно передать в шейдер вторую пару текстурных координат, для выборки из второй текстуры. фрагментный шейдер: Цитата:
Цитата:
У меня вот сомнения передадутся ли вторые текстурные координаты, ведь они принадлежат другому кваду... Или нужно записать сначала в наш квад вторым уровнем текстурные координаты от другого квада? |
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
Вложений: 1
А как ты вычесляешь вторые текстурные координаты?
Я думаю тут нужно вычислять вторые координаты в фрагментном шейдере, исходя из смещения и скейла маски в атласе маск. Тебе нужно передать данные о смещении и скейле, например: Смещение на 25% влево и вверх, также размер 50% от оригинала. По сути тебе нужно знать % смещение и % размера между регионом маски и самим атласом маски. Эти 4 переменные передать в шейдер (maskX, maskY, maskW, mashH). На примере картинки выше это будет: PHP код:
PHP код:
PHP код:
|
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
суть такова:
Уже есть два квада, оба затекстурированы, так что UV мы можем снимать с вершин. Но вопрос в том можем ли мы передавать в шейдер на первом кваде UV из второго как второй набор. |
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
Можешь, ты же можешь задать набор данных и замапить их в буффер вершин, что потом кормится шейдеру. Отрисуй текстурные координаты в фрагмент, и грянь если они "ОК".
Скрины бы помогли.. |
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
В Unity под iOS если uv выходят за пределы +-2 по u или v то Unity ругается, возможно там такое ограничение. Не знаю, поможет или нет в данном случае...
|
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
Я решил себе упростить чуть-чуть задачу, маски в отдельных файлах теперь, это позволяет пересчитывать UV координаты по методу moka.
Четыре флоата сдвига и скейла фрагмента основной текстуры передаются в шейдер для пересчета в пространство текстурных координат маски, которые теперь лежат в удобном диапазоне (0,0)-(1,1) В будущем постараюсь адаптировать к текстурным атласам и для масок тоже. |
Ответ: [cocos2d-x][shaders] Шейдер маски для фрагментов текстур
Результат то покажи, ну там скринчики шейдеров чтоль.. :)
|
Часовой пояс GMT +4, время: 03:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot