如果您想精确地解决像素问题,之前发布的答案是不够的。它计算像素的左下角。但是要将顶点精确地放置在像素上,您需要使用像素中心的坐标。
在您的示例中,宽度为 512 像素,未应用任何变换,这些像素跨越 NDC 坐标范围[-1.0, 1.0]. 这意味着每个像素的宽度都2.0 / 512在 NDC 空间中。
例如,对于第一个像素,如果你把它看成一个小方块,它的坐标范围是从-1.0到-1.0 + 2.0 / 512。因此,它的中心-1.0 + 1.0 / 512位于 NDC 空间。
将其推广到一般窗口 widthw和 height h,像素的坐标i水平方向索引k和垂直方向索引(从下到上)是:
x = -1.0 + i * (2.0 / w) + (1.0 / w) = (2.0 * i + 1.0) / w - 1.0
y = -1.0 + k * (2.0 / h) + (1.0 / h) = (2.0 * k + 1.0) / h - 1.0
Run Code Online (Sandbox Code Playgroud)