增加片段着色器的绘制区域

时间:2016-09-10 09:22:14

标签: opengl libgdx glsl

我正在使用libgdx,我希望通过此着色器在图像周围绘制轮廓:

build.gradle

来源:http://www.allpiper.com/2d-selection-outline-shader-in-libgdx/

#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif

uniform sampler2D u_texture;

// The inverse of the viewport dimensions along X and Y
uniform vec2 u_viewportInverse;

// Color of the outline
uniform vec3 u_color;

// Thickness of the outline
uniform float u_offset;

// Step to check for neighbors
uniform float u_step;

varying vec4 v_color;
varying vec2 v_texCoords;

#define ALPHA_VALUE_BORDER 0.5

void main() {
   vec2 T = v_texCoords.xy;

   float alpha = 0.0;
   bool allin = true;
   for( float ix = -u_offset; ix < u_offset; ix += u_step )
   {
      for( float iy = -u_offset; iy < u_offset; iy += u_step )
       {
          float newAlpha = texture2D(u_texture, T + vec2(ix, iy) * u_viewportInverse).a;
          allin = allin && newAlpha > ALPHA_VALUE_BORDER;
          if (newAlpha > ALPHA_VALUE_BORDER && newAlpha >= alpha)
          {
             alpha = newAlpha;
          }
      }
   }
   if (allin)
   {
      alpha = 0.0;
   }

   gl_FragColor = vec4(u_color,alpha);
}

到目前为止工作正常,除了纹理图像只有圆形大,因此片段着色器仅应用于圆周围的精确矩形。这导致像这样的图像(圆形体和鞭毛是单独的纹理):

without shader shader applied

那么有一种简单的方法可以增加应用片段着色器的区域吗?我认为像顶点着色器,向上缩放位置,向下缩放纹理(按相同的比例)。但我没有设法实现这一点。其他tipps也非常感谢。

我当然可以在纹理上添加一个边距,但这不是最佳解决方案,或者是它?

0 个答案:

没有答案