计算机图形学(第四版)P32页对gluOrtho2D(x1,x2,y,1y2)的描述如下:
区域的x坐标值从x1到x2,y坐标值从y1到y2,只要是在该矩阵内定义的对象,都会出现在显示窗口中。任何坐标范围外的内容都不会显示出来。
其实就是在说:若不调用gluOrtho2D(),窗口会显示-1<x<1,-1<y<1这个区域。如果调用gluOrtho2D(x1,x2,y,1y2),则窗口会显示x1<x<x2,y1<y<y2这个区域。
例如:
不调用gluOrtho2D这个函数,画一条在-1<x<1,-1<y<1这个区域内的线:
glBegin(GL_LINES);
glVertex2i(-1, -1);
glVertex2i(1, 1);
glEnd();
可以很正常的显示,但如果调用书中
glBegin(GL_LINES);
glVertex2i(180, 15);
glVertex2i(10, 145);
glEnd();
这样的一条直线显然在-1<x<1,-1<y<1全部为空。
故需要调用gluOrtho2D来改变窗口显示的坐标,使得其涵盖这条线即可:
gluOrtho2D(0.0, 200, 0.0, 150.0);
即可正常显示,当然只想显示部分细节也是可以的,如:
gluOrtho2D(100, 200, 0.0, 150.0);
还有一点需要注意的是,由于窗口的size固定后,不同的 gluOrtho2D导致横纵坐标密度不同,会在窗口显示中影响直线看起来的斜率。