opengl 如何使用texelFetch()获取sampler1D纹理中的元素?

b0zn9rqh  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(273)

我在sampler1D纹理中存储了一个1D高斯滤镜,并将其发送到片段着色器。在进行垂直和水平模糊时,我使用texelFetch()获取samlper1D贴图中的权重,但没有工作。数据如何存储在sampler1D中?

in vec2 texCoord; 
uniform int BlurFilterWidth; 
uniform sampler1D BlurFilterTex;
uniform sampler2D OriginalImageTex;
uniform sampler2D ThresholdImageTex;
uniform sampler2D HorizBlurImageTex;
uniform sampler2D VertBlurImageTex;

layout (location = 0) out vec4 FragColor;

void HorizBlurImage()
{

    ivec2 pix = ivec2(gl_FragCoord.xy);
    int TexSize = textureSize(BlurFilterTex,0);
    vec4 sum = texelFetch(ThresholdImageTex,pix,0) * texelFetch(BlurFilterTex, 0, 0).r;

    for( int i = 1; i < BlurFilterWidth; i++){
       sum += texelFetchOffset(ThresholdImageTex, pix, 0, ivec2(i,0)) * texelFetch(BlurFilterTex, i*TexSize, 0).r;
       sum += texelFetchOffset(ThresholdImageTex, pix, 0, ivec2(-i,0)) * texelFetch(BlurFilterTex, i*TexSize, 0).r;

    }
    FragColor = sum;
}
kzmpq1sx

kzmpq1sx1#

GL_TEXTURE_1D中,元素被组织在一个一维数组中。纹理坐标只是一个整数,用于寻址数组中的元素。那么,为什么要将索引i乘以TexSize呢?纹理坐标就是i
texelFetch(BlurFilterTex, i*TexSize, 0).r;

texelFetch(BlurFilterTex, i, 0).r;

相关问题