我正在使用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);
}
到目前为止工作正常,除了纹理图像只有圆形大,因此片段着色器仅应用于圆周围的精确矩形。这导致像这样的图像(圆形体和鞭毛是单独的纹理):
那么有一种简单的方法可以增加应用片段着色器的区域吗?我认为像顶点着色器,向上缩放位置,向下缩放纹理(按相同的比例)。但我没有设法实现这一点。其他tipps也非常感谢。
我当然可以在纹理上添加一个边距,但这不是最佳解决方案,或者是它?