Войти
ПрограммированиеФорумГрафика

[OpenGL]2d light? (2 стр)

Страницы: 1 2 3 Следующая »
#15
11:28, 17 авг 2014

Laynos
Нет у меня примера, если на распространение света должны влиять все спрайты, то выходит что каждый пиксель спрайта может влиять на источник - думаю это нифига не простая задачка и до вас ее врядли кто-то решал. Если получиться - то Это просто выход на новый уровень в системах света. Тут сначала надо задуматься какие пиксели и как должны влиять, т.е. У них должен появиться некий параметр - прозрачность для источника света и это не то же самое что альфа канал в текстуре.

Если делать на уровне геометрии, то тут немного проще - такой вопрос - вы можете построить около источника света список треугольников - т.е. расчитать и определить область которая должна быть освещена? Т.е. куда попадает свет? Тут не нужны шейдеры.

#16
11:54, 17 авг 2014

leonardo98
> Нет у меня примера, если на распространение света должны влиять все спрайты, то
> выходит что каждый пиксель спрайта может влиять на источник - думаю это нифига
> не простая задачка и до вас ее врядли кто-то решал.
Shadow mapping во всех играх почти используют. Я думаю, его можно и для 2D адаптировать. Рендерить со стороны источника света в 1D текстуру глубины, а шейдере читать из неё и проводить сравнения. Можно эту идею развить наверное, но мне лень. Всё равно наверное ТС не осилит.

#17
13:28, 17 авг 2014

Laynos

во Флеш это делает так:

1. создаешь изображение круга с градиентной заливкой цветом и альфой.
от центра к краям.

2. выводишь это изображение с режимом смешивания BlendMode.OVERLAY.

3. теней не будет, их нужно отдельно просчитывать.

#18
18:24, 17 авг 2014

gammaker
> Shadow mapping во всех играх почти используют. Я думаю, его можно и для 2D
> адаптировать. Рендерить со стороны источника света в 1D текстуру глубины, а
> шейдере читать из неё и проводить сравнения. Можно эту идею развить наверное,
> но мне лень. Всё равно наверное ТС не осилит.

Можно и просто в пиксельном шейдере лучи к источникам света покидать. Если еще и высоту каждого пикселя учитывать, то тени красивые получаются.

#19
18:37, 17 авг 2014

gammaker
Shadow map тут никак не прикрутить, там фишка в том что можно поставить камеру в точку источника света, в 2д это получиться бесполезная полосочка(в лучшем случае)

unnamed
Интересная идея, звучит красиво, но как определять затенен пиксель или нет - пробегать все пиксели до источника света?

#20
19:00, 17 авг 2014

leonardo98
> Интересная идея, звучит красиво, но как определять затенен пиксель или нет -
> пробегать все пиксели до источника света?

необязательно все. нужно выбрать определенный шаг.

> Интересная идея, звучит красиво,

да и работает неплохо, правда довольно медленно. Хотя планшет(на интеле) спокойно тащит в full hd.

#21
14:07, 18 авг 2014

Ну, тогда вопрос другой немного.
Как с помощью шейдера сделать:
1)Чтобы вся картинка была чуть затенена, типа сейчас вечер\ночь
2)"Свет" рендерился с помощью такой текстуры:

+ Показать

?

#22
13:24, 19 авг 2014

up

#23
16:51, 19 авг 2014

Laynos
> Ну, тогда вопрос другой немного.
> Как с помощью шейдера сделать:
> 1)Чтобы вся картинка была чуть затенена, типа сейчас вечер\ночь
> 2)"Свет" рендерился с помощью такой текстуры:
Тут и шейдеры не обязательно использовать.
1) Создаешь рендер таргет размером с экран. Чистишь его темносиним цветом (это будет амбиент).
2) Затем с адиттивным блендингом рисуешь в рендер таргет пятно света в нужной тебе позиции.
3) Рисуешь объекты сцены на экран как обычно, без освещения.
4) Сверху на экран твой рендер таргет с мультипликативным блендингом - бац.

lighting2d | [OpenGL]2d light?
#24
18:38, 19 авг 2014

SunnyBunny
> 1) Создаешь рендер таргет размером с экран. Чистишь его темносиним цветом (это
> будет амбиент).
только не обязательно в данном случае размер с экран, можно сделать меньше и увеличивать программно, пиксельной точности с тенями не требуется

#25
20:01, 19 авг 2014

leonardo98
Да, ты прав

#26
21:41, 19 авг 2014

SunnyBunny
о! Картинка немного яснее становится. Но есть немного впросов

> 4) Сверху на экран твой рендер таргет с мультипликативным блендингом - бац.
Эт как?..SunnyBunny
> 1) Создаешь рендер таргет размером с экран. Чистишь его темносиним цветом (это
> будет амбиент).
Что имеется ввиду под render target? Frame Buffer или что? О_о
SunnyBunny
> Затем с адиттивным блендингом рисуешь в рендер таргет пятно света в нужной
> тебе позиции.
Как? о_О

Я буду вам ОЧЕНЬ признателен если чуть-чуть подробнее объясните... Выручаете прямо!

#27
21:42, 19 авг 2014

SunnyBunny
> Чистишь его темносиним цветом (это будет амбиент).
А если менять этот цвет, то можно сделать смену дня и ночи?

#28
1:10, 20 авг 2014

sf::RenderTarget нашёл. Ииии? :с

#29
8:04, 20 авг 2014

Laynos
>> 4) Сверху на экран твой рендер таргет с мультипликативным блендингом - бац.
> Эт как?
Нарисуй на экран спрайт, занимающий всю площадь экрана, с текстурой из твоего рендер таргета и режимом смешивания Multiply.

Laynos
> Что имеется ввиду под render target? Frame Buffer или что? О_о
Да, в OpenGL это называется Frame Buffer. Но раз ты используешь SFML, там есть класс, облегчающий твою задачу.
Посмотри это http://www.sfml-dev.org/documentation/2.0/classsf_1_1RenderTexture.php
И тут http://sfml-dev.org/tutorials/2.1/graphics-draw.php раздел Off-screen drawing

Laynos
>> Затем с адиттивным блендингом рисуешь в рендер таргет пятно света в нужной тебе позиции.
> Как? о_О
Спрайтом

Laynos
> А если менять этот цвет, то можно сделать смену дня и ночи?
Конечно

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.