我正在尝试使用 2d 纹理作为查找表来索引更大的纹理。然后将颜色值纹理映射到四边形。我遇到的问题是,当我对其进行采样时,较大的纹理似乎小于其原始分辨率。例如,我有一个大的 4k x 4k 纹理。查找纹理对大纹理的 1k x 1k 区域进行采样。然后它将结果纹理映射到填充视口的四边形,它也是 1k 宽 x 1k 高。我希望在纹理四边形和原始 4k x 4k 纹理的 1k x 1k 部分之间仍能看到 1:1 映射。但是,纹理四边形非常混叠。看起来好像 4k x 4k 纹理被缩减为 1k x 1k 纹理,而我的查找图对该纹理的 512 x 512 部分进行了采样。
换句话说,看起来好像我是从已调整大小以适应 1k x 1k 视口的纹理进行采样,而不是从原生 4k x 4k 纹理中采样。我为什么要解决这个问题有问题吗?
这是我的顶点着色器:
uniform mat4 pvm;
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
and fragment shader:
uniform sampler2D image; //The large texture
uniform sampler2D map; //The lookup texture
void main()
{
vec4 pos = texture(map,(gl_TexCoord[0].st * vec2(-1.0, 1.0))); //Flip the origin
vec4 color = texelFetch(image,ivec2(pos.s*4096,pos.t*4096),0);
gl_FragColor = color;
}