1)glRectf(-10.0f, 10.0f, 10.0f, -10.0f); //(x1, y1, x2, y2) 注意的是参数其实不完全是实际的像素,更多的是跟窗口或裁剪区等的宽高的比例,用来定义裁剪区域的函数也是如此: glOrtho(-30.0f, 30.0f, -30.0, 30.0, 1.0, -1.0); //左右,底顶,近远(x轴向,y轴向,z轴向) 所以,如果希望当改变窗口大小时绘制的方形形状不随之发生伸缩位移,需要在控制窗口变形时重置裁剪区的函数中,添加如下代码: //建立裁剪区域 aspectRatio = (GLfloat)w / (GLfloat)h; //w, h 窗口的宽高 if(w <= h) glOrtho(-30.0f, 30.0f, -30.0/aspectRatio, 30.0/aspectRatio, 1.0, -1.0); else glOrtho(-30.0 * aspectRatio, 30.0f * aspectRatio, -30.0, 30.0, 1.0, -1.0); glOrtho韩式实际上并不建立裁剪区域,而只是修改原有的裁剪区域。 2)glLoadIdentity函数的目的是,在执行任何矩阵乘法操作之前,对当前的坐标系统进行“重置”。如果没有这种重置,在glOrto被调用后,每次调用glOrtho时,都会导致目标裁剪区被破坏,甚至图形无法显示。 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); 这两行是告诉opengl,以后所有的变换都将影响这个模型(即我们所绘制的图形)。 |
|