Как смешать / размыть два изображения в OpenglES/OpenGl, чтобы выходные данные выглядели как тема Windows Aero
Я нахожусь в процессе реализации этой темы Windows Aero на моем графическом процессоре Arm Mali. Следуйте этому изображению, я хочу получить эффект, подобный этой проверке этого http://vistastyles.org/wp-content/uploads/2007/06/windows_aero_by_blingboy31.jpg
Мой вопрос: как определить, какая область изображения (вверху) смешана с изображением (внизу), возможно, может быть перекрытие нескольких изображений, поэтому мне нужно принять вес каждого изображения или слоя, чтобы определить степень размытия показывать..??
& как мне нарисовать изображения? мне нужно нарисовать размытие изображения фона, а затем нормальное изображение или другим способом?
Любая помощь оценена...
СЕЗОН 2/*******************************************/ Ну, я пытался путь datenWolf, но застрял в шейдер размытия
Я использовал этот фрагментный шейдер для размытия, но он не дает точного эффекта полупрозрачности, я хочу получить
#version 120
uniform sampler2D sceneTex;
uniform float rt_w;
uniform float rt_h;
uniform float vx_offset;
float offset[3] = float[]( 0.0, 1.3846153846, 3.2307692308 );
float weight[3] = float[]( 0.2270270270, 0.3162162162, 0.0702702703 );
void main()
{
vec3 tc = vec3(1.0, 0.0, 0.0);
if (gl_TexCoord[0].x<(vx_offset-0.01))
{
vec2 uv = gl_TexCoord[0].xy;
tc = texture2D(sceneTex, uv).rgb * weight[0];
for (int i=1; i<3; i++)
{
tc += texture2D(sceneTex, uv + vec2(offset[i])/rt_w, 0.0).rgb * weight[i];
tc += texture2D(sceneTex, uv - vec2(offset[i])/rt_w, 0.0).rgb * weight[i];
}
}
else if (gl_TexCoord[0].x>=(vx_offset+0.01))
{
tc = texture2D(sceneTex, gl_TexCoord[0].xy).rgb;
}
gl_FragColor = vec4(tc, 1.0);
}
Я искал эффект размытия, как показано в этой ссылке http://incubator.quasimondo.com/processing/superfast_blur.php
но этот программный алгоритм не работает в моем коде, любая помощь для шейдера Blur С этим эффектом будет полезно, я использую OpenGLES 2.0 на Arm mali
1 ответ
Там нет процесса обнаружения, участвующих в композиции окна. Каждое окно доступно в виде отдельной текстуры, и окна отрисовываются в порядке глубины, используя шаг размывания между ними.
Это сделано по этому поводу. У вас есть два объекта кадрового буфера A и B для всего экрана. Foreach окно, которое вы
- Нарисуйте область, покрывающую окна от B до A с примененным фильтром размытия
- Вы рисуете фактическое содержимое окна поверх этого в B
- поменять местами ← ← B
повторите для каждого окна в порядке глубины. В основном это проявляется в виде ряда переключателей текстур, и хотя они довольно дорогие, количество (перекрывающихся) окон на экране всегда будет в пределах разумных цифр, так что это на самом деле не проблема.