Ios 如何在glsl中的texture2D中的textureCoordinate周围正确采样

Ios 如何在glsl中的texture2D中的textureCoordinate周围正确采样,ios,opengl-es,glsl,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(videoF

我想对一个特定像素周围的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文档中,苹果声明这应该打包在一个图像单元中,并且应该使用RegionFinterest函数。如果可能的话,我更愿意将其全部保存在glsl着色器中。

如果“范围”为20,则将对当前范围周围8个基本方向上的8个像素进行采样,但距离为20个像素。北20像素,东北20像素,等等。如果是1.0,那么你写的应该是当前像素周围的8个像素。我还假设textureCoordinate是当前像素的坐标。一定要这样

我应该补充一点,ImageUnits是不同的,你还不能在iOS上写你自己的ImageUnits,所以你可以忽略它。嗨,是的,这就是我想要的。采样20像素的北、南、东等。但是,在iPhone上运行着色器时,它似乎只采样一行而不是一列中的像素。这可能与GPU处理像素的顺序有关吗?从中采样的对象的纹理坐标是多少?如果纹理坐标Y值相同,那么我可以看到类似的情况发生。我正在采样的对象是来自iPhone摄像头的视频帧。它是1920x1080。