Game Maker - создание игр | HellRoom Games
Март 06, 2016, 13:43:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Hellroom Shoutbox Tools - JS расширение для доп. функционала в чате
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: surface и alpha маска  (Прочитано 2251 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Romixal
GM Pro user
*

Репутация: 146
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!Максимальное время пребывания на форуме!Знаток Game MakerЗа постоянность!
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 632



« : Январь 26, 2011, 21:32:59 »

Возможно ли применить к сурфейсу альфа маску?
Мне нужно чтоб было так: см. прикрепление, где красным обозначен сурфейс и синим то, что под сурфейсом.

123.png
surface и alpha маска
* 123.png (27.93 Кб, 448x336 - просмотрено 366 раз.)
Записан

DeatHSoul
GM Pro user
*

Репутация: 228
Offline Offline

Пол: Мужской


Награды:
Максимальное время пребывания на форуме!За лояльность!За постоянность!FAQ для начинающих & Сленг и ТерминологияЗа помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 496


« Ответ #1 : Январь 27, 2011, 22:34:35 »

Конечно возможно.  

Первый метод:
Области, которые должны быть прозрачными в  сурфейсе - непрозрачный чёрный цвет на маске.
Области, которые должны быть непрозрачными в сурфе - прозрачный чёрный цвет на маске.
Маску рисуем поверх сурфейса с режимом смешивания: draw_set_blend_mode(bm_subtract);

Второй метод:
Области, которые должны быть прозрачными в  сурфейсе - прозрачный белый цвет на маске.
Области, которые должны быть непрозрачными в сурфе - непрозрачный белый цвет на маске.
Маску рисуем поверх сурфейса с режимом смешивания: draw_set_blend_mode_ext(bm_zero, bm_src_color);

UPD: картинка! 

example.png
surface и alpha маска
* example.png (80.13 Кб, 768x512 - просмотрено 392 раз.)
Записан
MyDreamForever
GM Pro user
*

Репутация: 139
Offline Offline

Пол: Мужской
Ukraine Ukraine

Награды:
3 место на HellRoom Jam #4, Ancient EgyptЗа постоянность!500 сообщений!За победу в новогоднем конкурсе [месяц тематических игр - 2012] (3 место)
API: Game Maker 8.0 Pro
Сообщений: 559


StarCraft <3


« Ответ #2 : Январь 27, 2011, 23:13:36 »

Простите, можете мне объяснить что такое вообще.
Сурфейс маска.
Альфа маска.
Записан
DeatHSoul
GM Pro user
*

Репутация: 228
Offline Offline

Пол: Мужской


Награды:
Максимальное время пребывания на форуме!За лояльность!За постоянность!FAQ для начинающих & Сленг и ТерминологияЗа помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 496


« Ответ #3 : Январь 27, 2011, 23:17:49 »

"Сурфейс маска" - такого нет, есть "Маска сурфейса". Это, собс-но, какая-либо маска для сурфейса. Иногда это маска столкновений, иногда это альфа-маска, а иной раз это ещё что-нибудь.

Альфа-маска - от англ. "Alpha mask". То есть, это маска прозрачности сурфейса. Её пиксели определённым образом отражают прозрачность пикселей сурфейса, аналог альфа-канала.
Записан
Romixal
GM Pro user
*

Репутация: 146
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!Максимальное время пребывания на форуме!Знаток Game MakerЗа постоянность!
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 632



« Ответ #4 : Январь 28, 2011, 04:47:04 »

Довольно интересные эффекты получаються  
Ну да, ещё плюс в репу  

screenshot100.png
surface и alpha маска
* screenshot100.png (68.99 Кб, 640x480 - просмотрено 404 раз.)
screenshot10022.png
surface и alpha маска
* screenshot10022.png (43.33 Кб, 640x480 - просмотрено 374 раз.)
Записан

Vendet
Гл. Администратор
*

Репутация: 759
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Сообщений: 3975


HellRoom Games


WWW
« Ответ #5 : Январь 28, 2011, 11:33:11 »

Прикольно) 
Записан

drdan1959
GM Pro user
*

Репутация: 68
Offline Offline

Награды:
За полезные ресурсы! [Страсти по СТАЛКЕРУ]
API: 8.0 Pro
Сообщений: 224


« Ответ #6 : Январь 29, 2011, 16:28:06 »

DeatHSoul, погоди-ка, маска сурфейса - это по сути любой рисунок, который мы можем увидеть на экране, нарисовав этот сурфейс. Так?
С альфа-маской всё понятно.
Смешивая их мы получаем изображение, содержащее сам рисунок и альфа-канал. Так?
Расскажи поподробнее про эти режимы смешивания. Как-то пытался с ними разобраться, но дальше кучи перепробованных вариантов, из которых я всё равно ничего не понял, не ушёл. В справке тоже как-то мутно написано.
Записан

Хочешь изменить мир - начни с себя.
Не знаешь как, читай хелп
Romixal
GM Pro user
*

Репутация: 146
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
500 сообщений!Максимальное время пребывания на форуме!Знаток Game MakerЗа постоянность!
API: GameMaker Studio Pro
Деятельность: developer
Сообщений: 632



« Ответ #7 : Январь 29, 2011, 16:53:02 »

В принципе получаеться неплохо, всё нормально работает при ~250 fps.
С шейдерами =)

Безымянный.png
surface и alpha маска
* Безымянный.png (92.56 Кб, 640x480 - просмотрено 399 раз.)
Записан

DeatHSoul
GM Pro user
*

Репутация: 228
Offline Offline

Пол: Мужской


Награды:
Максимальное время пребывания на форуме!За лояльность!За постоянность!FAQ для начинающих & Сленг и ТерминологияЗа помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 496


« Ответ #8 : Январь 30, 2011, 02:31:23 »

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

С альфа-маской всё понятно.
Смешивая их мы получаем изображение, содержащее сам рисунок и альфа-канал. Так?
Да. Это тоже самое, когда в GM 6.1 добивались альфа-канала посредством использования функции sprite_set_alpha_from_sprite. Один спрайт было само bmp изображение, второй - чёрно-белая альфа-маска.

Расскажи поподробнее про эти режимы смешивания. Как-то пытался с ними разобраться, но дальше кучи перепробованных вариантов, из которых я всё равно ничего не понял, не ушёл. В справке тоже как-то мутно написано.
Краткое описание:
Как известно, каждый пиксель имеет четыре компонента - красный, зелёный, синий и непрозрачность (Red, Green, Blue, Alpha). Значение каждого компонента пролегает между 0 и 1. К примеру, пиксель (1,0,0,1) - полностью непрозрачный, красного цвета (0 - 0, 127.5 - 0.5, 255 - 1 и тд).
Чтобы получить правильное значение цвета и непрозрачности у пикселей, которые перекрывают друг друга - используются режими смешивания. Назовём пиксель, который мы рисуем - "рисуемым пикселем" (Rs,Gs,Bs,As), а пиксель на который мы рисуем - "пикселем на экране" (Rd,Gd,Bd,Ad), (названия взяты по аналогии с этой статьёй). После смешивания этих двух пикселей мы получаем "новый пиксель" (Rn,Gn,Bn,An), - буквально тот пиксель, который видит пользователь (s - source, d - destination, n - new). Происходит это примерно так:
Код:
новый_пиксель = (рисуемый_пиксель * src_blend) + (пиксель_на_экране * dest_blend)
src_blend и dest_blend - особые значения, называемые "показателями смешивания", которые обеспечивают правильное (требуемое) смешивание.  Каждый показатель - src_blend и dest_blend имеет 4 значения, которые можно посмотреть в самом низу этой страницы.
Итак, мы имеем цвет и непрозрачность пикселя на экране, и того пикселя, что мы рисуем. Как нам получить цвет нового пикслея? Нужно расчитать каждый показатель отдельно - отдельно красный цвет, отдельно синий, отдельно зелёный и отдельно непрозрачность. Получаем такую формулу:
Код:
//Получаем компоненты нового_пикселя с помощью режима смешивания
Rn = (Rs * src_blend_0) + (Rd * dest_blend_0); // Получаем красный компонент цвета нового пикслеля - того, который увидит пользователь
Gn = (Gs * src_blend_1) + (Gd * dest_blend_2); // Зелёный компонент
Bn = (Bs * src_blend_2) + (Bd * dest_blend_3); // Синий компонент
An = (As * src_blend_3) + (Ad * dest_blend_4); // Получаем непрозрачность
Стандартный режим смешивания GM - bm_src_alpha (As, As, As, As) и bm_inv_src_alpha (1–As, 1–As, 1–As, 1–As). Получаем:
Код:
//Получаем компоненты нового_пикселя стандартным режимом смешивания GM
Rn = (Rs * As) + (Rd * (1-As));
Gn = (Gs * As) + (Gd * (1-As));
Bn = (Bs * As) + (Bd * (1-As));
An = (As * As) + (Ad * (1-As));

P.S: как-нибудь таки найду время написать статью про режимы смешивания, так как у многих пользователей возникают вопросы.  
Записан
drdan1959
GM Pro user
*

Репутация: 68
Offline Offline

Награды:
За полезные ресурсы! [Страсти по СТАЛКЕРУ]
API: 8.0 Pro
Сообщений: 224


« Ответ #9 : Январь 30, 2011, 09:45:07 »

Так, то есть source - это то, что уже "нарисовано" (то, что будет показано на экране, если не использовать данную функцию рисования), а destination - "добавляемое" содержимое?
В общем-то вот этого видимо и не хватало для понимания.

Цитировать
Стандартный режим смешивания GM - bm_src_alpha (As, As, As, As) и bm_inv_src_alpha (1–As, 1–As, 1–As, 1–As). Получаем:
Код:
Код:
//Получаем компоненты нового_пикселя стандартным режимом смешивания GM
Rn = (Rs * As) + (Rd * (1-As));
Gn = (Gs * As) + (Gd * (1-As));
Bn = (Bs * As) + (Bd * (1-As));
An = (As * As) + (Ad * (1-As));

Почему тут второй сомножитель As, а не Ad?
Записан

Хочешь изменить мир - начни с себя.
Не знаешь как, читай хелп
Sashok_one
Активный участник
*****

Репутация: 42
Offline Offline

Пол: Мужской
Russian Federation Russian Federation

Награды:
Максимальное время пребывания на форуме.За постоянность!
API: Game Maker 8.0 Pro
Деятельность: Программист (GML, C#), художник, дизайнер.
Сообщений: 257

*BOOOM*


« Ответ #10 : Январь 30, 2011, 09:55:24 »

да, полезно было бы написать статейку, а то я так и нечего не понял...

Добавлено: Январь 30, 2011, 09:58:07
и тут возникает мой вопрос, а может быть несколько масок дл сурфейса?!!! angel
Записан
DeatHSoul
GM Pro user
*

Репутация: 228
Offline Offline

Пол: Мужской


Награды:
Максимальное время пребывания на форуме!За лояльность!За постоянность!FAQ для начинающих & Сленг и ТерминологияЗа помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 496


« Ответ #11 : Январь 30, 2011, 13:53:30 »

drdan1959, мой пост написан сухо, но его можно несколько раз перечитать, и до тебя, возможно, дойдёт суть. 
Так, то есть source - это то, что уже "нарисовано" (то, что будет показано на экране, если не использовать данную функцию рисования), а destination - "добавляемое" содержимое?
Нет.
Цитировать
рисуемый пиксель: (Rs,Gs,Bs,As)
пиксель на экране: (Rd,Gd,Bd,Ad)
Следовательно, source - исходный пиксель, это тот, который мы рисуем. А destination - расположение, пиксель который уже нарисован.

Почему тут второй сомножитель As, а не Ad?
Первый сомножитель тут As
А второй - (1 - As)
Почему?
Я уже писал:
Цитировать
bm_src_alpha (As, As, As, As) и bm_inv_src_alpha (1–As, 1–As, 1–As, 1–As)


и тут возникает мой вопрос, а может быть несколько масок дл сурфейса?!!! angel
Да сколько хочешь. Нет никаких ограничений. Это твое личное дело.  :-\
Записан
drdan1959
GM Pro user
*

Репутация: 68
Offline Offline

Награды:
За полезные ресурсы! [Страсти по СТАЛКЕРУ]
API: 8.0 Pro
Сообщений: 224


« Ответ #12 : Январь 30, 2011, 17:38:13 »

Цитировать
Следовательно, source - исходный пиксель, это тот, который мы рисуем. А destination - расположение, пиксель который уже нарисован.
Ясно. Я думал, что наоборот.
Тогда всё понятно. И вопрос про множители отпадает =)
Большое спасибо, надеюсь мне это поможет =)
Записан

Хочешь изменить мир - начни с себя.
Не знаешь как, читай хелп
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Vendet | HellRoom Games © 2006-2015 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines