Итак, у меня довольно простая игра 2d в реальном времени, в которой я пытаюсь добавить приятное свечение. Чтобы довести его до самой основной формы, это просто круги и ложь, нарисованные на черной поверхности. И если вы считаете сцену с точки зрения цветового пространства hsv, все цвета (кроме черного) имеют значение «v» 100%.путаница затухания в реальном времени
В настоящее время у меня есть своего рода накопительный буфер, в котором текущий кадр соединен с предыдущим кадром. Он работает с использованием двух буферов вне экрана и черной текстуры.
- Буфер один активированного -------------
- линии и точки обращаются
- буфера один дезактивированного
- Буфера два активированных --------- ----
- Buffer два содержимых нарисованные как фул экран Quad
- Черного текстуры обращается с небольшой прозрачностью более полного экрана
- Buffer один содержанием обращается
- Buffer два деактивируется
- На буферах экрана активируется -------
- Buffer двоичного содержимого нарисованного на экран
Сейчас все «лаг», безусловно, происходит от задержки на процессоре. Графический процессор полностью справляется с этим.
Так что я думал о том, что, возможно, попытаюсь оживить вещи, добавив эффект свечения к вещам. Я думал, возможно, для шага 10 вместо использования обычного текстурного шейдера, я мог бы использовать тот, который рисует текстуру, за исключением свечения!
К сожалению, я немного смущен о том, как это сделать. Вот некоторые причины:
- Blur stuff. В основном, что некоторые люди утверждают, что размытие Гаусса может быть сделано в режиме реального времени, в то время как другие говорят, что вы не должны. Также люди упоминают другой тип размытия, называемый «фокус», который я не знаю, что это такое.
- Большинство примеров, которые я могу найти, используют XNA. Мне нужно иметь тот, который написан на языке шейдеров, который похож на OpenGL es 2.0.
- Некоторые люди называют это свечением, другие называют это цветением
- Различные режимы наложения? можно использовать для добавления свечения к исходной текстуре.
- Как совместить вертикальное и горизонтальное размытие? Возможно, в одном призыве?
Во всяком случае, процесс, как я понимаю, для визуализации свечения, таким образом,
- Вырежьте темные данные из него
- Пятно света данных (с использованием гауссовой?)
- Blend, легкие данные по -top оригинала (смешение экрана?)
До сих пор я дошел до того, что у меня есть шейдер, который рисует текстуру. Как выглядит мой следующий шаг?
//Vertex
percision highp float;
attrivute vec2 positionCoords;
attribute vec2 textureCoords;
uniform mat4 matrix;
uniform float alpha;
varying vec2 v_texcoord;
varying float o_alpha;
void main()
{
gl_Position = matrix * vec4(positionCoords, 0.0, 1.0);
v_texcoord = textureCoords.xy;
o_alpha = alpha;
}
//Fragment
varying vec2 v_texcoord;
uniform sampler2D s_texture;
varying float o_alpha;
void main()
{
vec4 color = texture2D(s_texture, v_texcoord);
gl_FragColor = vec4(color.r, color.g, color.b, color.a - o_alpha);
}
Также это можно сделать в режиме реального времени?
Edit: Я, вероятно, хотите сделать 5px или меньшим размытием