Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как сделать эффект “Туман Войны” используя графические примитивы?

#java #opengl


Делаю игру (курсовой проект) и надо создать эффект "Туман Войны" (это когда первоначально
карта вся затемнена и открывается постепенно вокруг персонажа при его движении). 
Использую Slick (игровая библиотека основанная на LWJGL). Видел на форуме этой библиотеки
создание такого эффекта, но там очень сложно (мне уж по крайней мере). 
Появилась идея как сделать это самому используя круг и прямоугольник. Рисуем карту,
рисуем персонажа, поверх всего рисуем черный прямоугольник с прозрачным "как бы встроеным"
кругом . При движении персонажа, к этой фигуре (круг+прямоугольник) будет добавляться
новый прозрачный круг с другими координатами. 
Незнаю как соединить прямоугольник и круг так, как мне надо. 
Круг заливаю прозрачным цветом, там есть класс     Color (red, green, blue, alpha)
P.S работа с прямоугольником и кругом практически такая же, как и в AWT.
P.P.S возможно моя идея бредовая и не эффективная, если знаете реализацию "тумана
войны" лучше и проще скажите мне её пожалуйста)
LWJGL - работа с openGL.    


Ответы

Ответ 1



Можно и без примитивов обойтись. По идее, в OpenGL была такая фича как координаты тумана, позволяющая задать уровень затуманенности отдельных частей сцены. Координаты тумана - это атрибут вершины, а туман - тот, который настраивается через glFog. Можно сделать сетку(допустим, M*N, где M,N - размеры карты) из квадов чёрного цвета и по мере продвижения игрока выставлять её вершинам ненулевую альфу. Сетку рисовать поверх левела, конечно же. Можно взять текстуру(изначально - чёрную/непрозрачную), при каждом передвижении игрока отрисовать в неё прозрачную область(рендеринг в текстуру может быть непривычным, но эта техника весьма распространена и даёт отличные результаты, в том числе и в этом случае), а потом натянуть эту текстуру на один квад размером на всю карту и отрисовать поверх всего. Если какие-то техники заинтересовали - могу рассказать подробнее :)

Ответ 2



Я бы сделал так, на примере tilemap делаем карту, спрайты тумана войны и накладываем их поверх карты, то есть первоначально вся карта будет под спрайтами тумана, на карте делаем точку(respawn), где появляется персонаж в начале игры и задаём параметры, чтобы вокруг него, в радиусе нескольких тайлов, спрайты тумана исчезали, вот так вот.

Комментариев нет:

Отправить комментарий