如何在glsl中的texture2D中正确地对textureCoordinate进行采样

时间:2012-01-26 09:35:28

标签: ios opengl-es glsl

我想在特定像素周围采样8个像素,并从中计算一堆信息以用于阈值程序。

这是在iOS中使用glsl顶点和片段着色器。

以下是片段着色器的采样代码:

p00 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent, -1.0*extent)); 
p01 = texture2D(videoFrame, textureCoordinate+vec2( 0.0, -1.0*extent));
p02 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent, -1.0*extent));
p10 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent,  0.0));
p11 = texture2D(videoFrame, textureCoordinate);
p12 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent,  0.0));
p20 = texture2D(videoFrame, textureCoordinate+vec2(-1.0*extent, +1.0*extent));
p21 = texture2D(videoFrame, textureCoordinate+vec2( 0.0, +1.0*extent));
p22 = texture2D(videoFrame, textureCoordinate+vec2(+1.0*extent, +1.0*extent));

范围只是一个数字,目前设置为20.0。我希望在当地合理地进行抽样。

这编译好了,但是根据我的例程结果,我怀疑这不是对当前像素周围的像素进行采样,而是似乎是沿着一行延伸的采样像素。

我有什么想法可以解决这个问题吗?

我不确定这是否有效的另一个原因是在iOS文档中Apple声明应将其打包在图像单元中并使用regionofinterest函数。如果可能的话,我宁愿将它全部保存在glsl着色器中。

1 个答案:

答案 0 :(得分:0)

如果范围是20,则您将对当前一个周围8个基本方向的8个像素进行采样,但距离20个像素。 (所以20像素“北”,20像素“东北”等)如果它是1.0,那么你所写的应该采样当前像素周围的8个像素。 (我还假设textureCoordinate是当前像素的坐标。确保就是这种情况。)