我的问题是关于纹理坐标如何准确映射到纹理中的纹素(不考虑过滤)。
例如,(0,0)是指左上角像素的左上角还是指左上角像素的中心?
如果使用近似过滤,在纹理坐标 (0.5,0.5) 处获取什么像素?
那么(1.0,1.0)呢,它是指右下角像素的右下角还是右下角像素的左上角?(我记得几年前这在一些 ATI 和 NVIDIA 卡之间有所不同。现在标准化了吗?)
如果使用 texelFetch() 而不是 textureLod(),那么访问像素的正确方法是什么?
是吗
ivec2 size = textureSize(sampler,0);
ivec2 iCoords = ivec2(int(uv.x*size.x),int(uv.y*size.y));
vec4 col = texelFetch(sampler,iCoords);
或者也许
ivec2 iCoords = ivec2(int(uv.x*size.x+0.5f),int(uv.y*size.y+0.5f));
正确的?
甚至
ivec2 iCoords = ivec2(int(uv.x*(size.x+1)),int(uv.y*(size.y+1)));
?
也许有人可以澄清映射究竟是如何工作的?