(重要)
image.png
纹理也是由正方形的纹素(texel)组成,每个纹素代表一种颜色,并且纹素坐标的原点在左上角纹素的左上角(重要)
image.png
纹理的采样使用的是双线性...我们想要绘制的正方形大概是这个样子:
image.png
由于像素是离散的,我们需要将绘制的正方形与像素尽可能的”对齐”(这里涉及到光栅化的规则,有兴趣的朋友可以去这里了解),所以实际绘制的正方形是这个样子的...:
image.png
考虑到我们是从像素坐标的原点开始定义正方形的,所以上图所示的实际绘制结果也是符合预期的(正方形左上角与窗口左上角是对齐的)
现在我们想要将上面的纹理映射到刚才所绘制的正方形上去...不过更通用的做法,还是直接偏移顶点的像素坐标,仍然拿上面的正方形绘制举例,我们对正方形的各个顶点做一个(-0.5, -0.5)像素的偏移,那么实际绘制的正方形就是这个样子的:
image.png...,即是 Half-Pixel Offset
Half-Pixel Offset 只会在 Direct3D 9 及之前的Direct3D版本上出现,本质原因是像素坐标和纹素坐标定义不一致,OpenGL的像素坐标和纹素坐标定义是一致的