(1)关于glOrtho函数的用法:

这个函数的作用就是取出适当的景物,简单的讲就是确定一个长方体,体内的表现出来,体外的裁减掉,长体的z轴方向的一个侧面对应于视口(视口可以不是窗口,比如客户区的一半),在视口改变时:

我们跟着改变相应的取景,以适应这个改变:
捕捉Size消息时




















这里的if语句并不重要,只是起着放大缩小按宽还是按高。
(2)还有一种办法就是用glScalef函数,在改变视口时,纵横方向作适当的缩放:
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glLoadIdentity ();
if (w <= h)
glScalef (0.5, 0.5*(GLfloat)w/(GLfloat)h, 1.0);
else
glScalef (0.5*(GLfloat)h/(GLfloat)w, 0.5, 1.0);

glLoadIdentity ();




这里的两种办法得到的效果都能保证纵横尺度一致,但效果并不一样;在视口(glViewport)确定下来后glOrtho是通过改变取景,即取相应比例的景物来保证适应相应的视口;而glScalef是在不改变取景的前提下,单纯缩放坐标的轴的比例来实现,这样的结果是景物有可能超出视口。