我的目标是在Opengl ES中创建sobel过滤器。我正在使用Netbeans IDE。在调试模式下一切正常,但在发布模式下,我正在获取网格线。代码运行在树莓派上。sobel过滤器中的不必要的网格线Opengl ES
任何人都可以帮我摆脱这些线?
这是片段着色器代码。
varying vec2 tcoord;
uniform sampler2D tex;
uniform vec2 texelsize;
void main(void)
{
vec4 tm1m1 = texture2D(tex,tcoord+vec2(-1,-1)*texelsize);
vec4 tm10 = texture2D(tex,tcoord+vec2(-1,0)*texelsize);
vec4 tm1p1 = texture2D(tex,tcoord+vec2(-1,1)*texelsize);
vec4 tp1m1 = texture2D(tex,tcoord+vec2(1,-1)*texelsize);
vec4 tp10 = texture2D(tex,tcoord+vec2(1,0)*texelsize);
vec4 tp1p1 = texture2D(tex,tcoord+vec2(1,1)*texelsize);
vec4 t0m1 = texture2D(tex,tcoord+vec2(0,-1)*texelsize);
vec4 t0p1 = texture2D(tex,tcoord+vec2(0,-1)*texelsize);
vec4 xdiff = -1.0*tm1m1 + -2.0*tm10 + -1.0*tm1p1 + 1.0*tp1m1 + 2.0*tp10 + 1.0*tp1p1;
vec4 ydiff = -1.0*tm1m1 + -2.0*t0m1 + -1.0*tp1m1 + 1.0*tm1p1 + 2.0*t0p1 + 1.0*tp1p1;
vec4 tot = sqrt((xdiff*xdiff)+(ydiff*ydiff));
vec4 col = tot;
col.a = 1.0;
gl_FragColor = clamp(col,vec4(0),vec4(1));
}
这是调试图像。
发布图像。
谢谢,但它并没有解决这个问题:
你可以用这个指令在着色器的最开始设定的精度。 – 2014-10-20 04:52:57
只有在使用-Ox标志进行编译时才会出现问题。 x = 1,2,3 – 2014-10-20 05:48:45
如何编译CPU代码不应该影响着色器中发生的情况。如果仅仅在着色器中进行采样,没有任何过滤计算,纹理是否正常? – 2014-10-20 05:56:59