SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Адекватный blur
В этой теме 1 ответ, 1 участник, последнее обновление soaup 7 года/лет, 8 мес. назад.
-
АвторСообщения
-
Здравствуйте! Пытаюсь визуально выделить паузу в игре, размыв всю картинку. У меня используется несколько классов и каждый что-то отрисовывает. Загружаю шейдер blur.frag
C++1234567891011121314151617181920uniform sampler2D texture;uniform float blur_radius;void main(){vec2 offx = vec2(blur_radius, 0.0);vec2 offy = vec2(0.0, blur_radius);vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 4.0 +texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 +texture2D(texture, gl_TexCoord[0].xy + offx) * 2.0 +texture2D(texture, gl_TexCoord[0].xy - offy) * 2.0 +texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 +texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 +texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 +texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 +texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0;gl_FragColor = gl_Color * (pixel / 16.0);}Отрисовываю через экземпляр RenderWindow, указав шейдер вторым параметром (предварительно его загрузил и настроил как надо). И кстати из главного объекта формирующего сцену передается указатель на шейдер и на RenderWindow в побочные объекты которые тоже что-то отрисовывают используя их. И в итого для каждого отдельного спрайта блюр как то по разному выглядит, что не очень красиво.
Пробовал по другому: в момент паузы вызывать у объекта RenderWindow функцию capture() и возвращенный Image отрисовать с шейдером в момент паузы (capture() вызывается только в момент паузы, дальше image просто хранится). Тогда выглядит как надо, но capture() медленно работает, и это видно невооруженным глазом – в паузу переключается не сразу, а через долю секунды. Есть ли способ побыстрее делать это, или нужно как-то адекватнее применять шейдер?
На самом деле надо было все рисовать в RenderTexture и применять блюр к спрайту от него! Все вопроса нет!
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.