如何在OpenglES / OpenGl中混合/模糊两个图像,使输出看起来像一个Windows aero主题

时间:2012-07-22 16:18:50

标签: windows opengl-es themes aero

我正在使用Arm Mali GPU实现这个Windows aero主题 按照这个图像,我想要这样的效果 结帐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

但是这个软件算法在我的代码中不起作用,对模糊着色器有任何帮助这种效果会有所帮助,我在Arm mali上使用OpenGLES 2.0

1 个答案:

答案 0 :(得分:2)

窗口组合中没有涉及检测过程。每个窗口都可以作为单独的纹理使用,窗口按照深度顺序绘制,使用中间的模糊步骤。

这是完成的。整个屏幕有两个帧缓冲对象 A B Foreach 窗口

  1. 将窗口覆盖的区域从 B 绘制到 A 并应用了模糊滤镜
  2. 您将实际窗口内容绘制到 B
  3. 之上
  4. 交换A←→B
  5. 按深度顺序重复每个窗口。基本上这可以作为一些纹理开关出现,虽然它们有点贵,但屏幕上(重叠)窗口的数量总是在合理的数字范围内,所以这不是一个真正的问题。