我正在尝试使用2d纹理作为查找表来索引更大的纹理。然后纹理将颜色值映射到四边形。我遇到的问题是,当我对其进行采样时,较大的纹理看起来比原始分辨率小。例如,我有一个4k x 4k的大纹理。查找纹理对大纹理的1k×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;
}
答案 0 :(得分:0)
别名是一个值得注意的问题并不奇怪,texelFetch (...)
禁用过滤,包括mip映射。如果你使用这个功能,你必须自己实现这些东西。
texelFetch (...)
的一个典型用例是禁用纹理过滤(不是你想要的)或从多重采样纹理中获取特定样本(也不是你的想)。如果你想要纹理消除锯齿,最好使用标准化纹理坐标和常规texture (...)
。