【发布时间】:2012-04-06 22:47:26
【问题描述】:
我的问题是关于纹理坐标如何精确映射到纹理中的纹素(不考虑过滤)。
例如,(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)));
?
也许有人可以澄清映射究竟是如何工作的?
【问题讨论】:
-
这是一个常见问题解答。我确实在 StackOverflow.com stackoverflow.com/a/7272871/524368 stackoverflow.com/a/5879551/524368 上回答了几次
标签: opengl glsl texture-mapping uv-mapping