想当然的写成gluOrtho2D(0, width, height, 0);
但这是不对的。验证的方法是,只要画四条直线, width, height分别是窗口宽高:
1 | glBegin(GL_LINE_LOOP); |
应该只有左上两条直线能显示才对。但结果是右下两条显示了出来,把width+1, 则右边线条去掉了,所以整体的显示结果是向期望的向左上偏移了一个像素。
调整成这样才是正确的:
1 | gluOrtho2D(-1, width - 1, height - 1, -1); |
显然gluOrtho2D
对于整数的取值区间是(m, n]
。
程序在这种情况下真正做到了精确至像素,一个像素的错误(不是误差)让结果产生重大影响。真正的精确到像素只有可能是实在的数据运算而不是感觉和观察,不知设计湿看了作何想。