Свет не проникает сквозь стену, как?
|
|
SotGE | Дата: Среда, 09 Апреля 2014, 15:02 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Есть два объекта: objLight: Код Create: globalvar surface; surface=surface_create(room_width,room_height);
Begin Step: surface_set_target(surface); draw_set_color(c_white); draw_rectangle(0,0,room_width,room_height,false); surface_reset_target();
Draw: draw_set_blend_mode(bm_subtract); draw_surface(surface,0,0); draw_set_blend_mode(bm_normal);
objLamp: Код Create: globalvar surface; surface=surface_create(room_width,room_height);
Step: direction=point_direction(x,y,mouse_x,mouse_y); x=objPlayer.x; y=objPlayer.y; surface_set_target(surface); draw_set_blend_mode(bm_subtract); draw_sprite_ext(sprite_index,image_index,x,y,1,1,direction,c_white,1); draw_set_blend_mode(bm_normal); surface_reset_target();
Луч света нарисован градиентом от белого к черному. Как сделать, чтобы свет не проникал сквозь стену? Примерно таким образом:
Насчет глубины объектов я понял, depth=-y+a // a -дополнительная глубина, у всех объектах. А как, чтобы свет не проникал сквозь стену?
|
|
| |
ErrantBug | Дата: Четверг, 10 Апреля 2014, 14:21 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| Честно говоря, я не особо понял, что вы имеете в виду - картинка немного сбила с толку. Однако, попробую помочь чем смогу.
В общем, в сети я находил следующий алгоритм: Рисуется свет (обыкновенно в виде белого круга). Находятся крайние точки объектов, то бишь стен, препятствующих распространению света. В нашем случае, пусть это будут точки ABCD. Проводим отрезок от источника света (O) до каждой из этих точек. Для начала рассмотрим случай с точками A и B. Свет сталкивается с гранью квадрата и переходит в тень. Как вы видите по рисунку (коий обладает нехилыми погрешностями) получившийся треугольник AOB пропорционален EOF. Соответственно мы можем легко нарисовать эту самую тень, используя примитивы. Далее обычным образом рисуем сурфейс и радуемся жизни.
Подробнее смотрите тут. Однако уточню, что сей алгоритм нужно еще и хорошенько так оптимизировать во избежание резкого падения FPS. Потому лучше всего будет погуглить сторонние световые движки, благо их уйма.
Сообщение отредактировал ErrantBug - Четверг, 10 Апреля 2014, 14:22 |
|
| |
SotGE | Дата: Четверг, 10 Апреля 2014, 20:51 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| а без теней нельзя такого добится? чтобы например часть истояника света попадающего на стену как бы исчезала или скрывалась
|
|
| |
aFriend | Дата: Четверг, 10 Апреля 2014, 21:22 | Сообщение # 4 |
участник
Сейчас нет на сайте
| SotGE, погугли... Когда я начинал изучать GAMEMAKER мне попадалось много систем освещения
|
|
| |
ErrantBug | Дата: Четверг, 10 Апреля 2014, 21:26 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| SotGE, так это и есть то, что вы просите: свет за стенкой просто закрашивается, то бишь скрывается. Как вариант, вы можете без универсального алгоритма, ориентируясь на текущее положение источника света, попросту закрашивать на сурфейсе нежелательные места. Но это будет работать точно так же, но только выглядеть в разы неказистей. В общем, ничего предложить больше не могу.
Цитата aFriend ( ) SotGE, погугли... Когда я начинал изучать GAMEMAKER мне попадалось много систем освещения В основном они работают по одному и тому же алгоритму, коий я привел выше. Но ТС этот алгоритм не устраивает.
Сообщение отредактировал ErrantBug - Четверг, 10 Апреля 2014, 21:27 |
|
| |