我的问题是关于纹理坐标如何映射到纹素(不考虑滤波)。
例如,(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)));
也许有人可以澄清映射是如何确切工作的?