通过上面一个程序我们可以发现一个问题或者说是一个优点,就是随着显示窗口的增大,显窗口中显示的图像也会随之增大,这个在很多界面语言中的需要完成的一个功能,现在OpenGL中提出了一个问题,我们不想随着窗口的变化而使得其中显示的图形的比例之类的也发生变化,那么这就是这个程序该做的事情。
看程序
#include <gl/glut.h>
#include <math.h>
GLuint regHex;
void init()
{
glClearColor(0.0,0.0,0.0,0.0);
//gluOrtho2D(0,10,0,10);
regHex = glGenLists(1);
glNewList(regHex,GL_COMPILE);
glBegin(GL_LINES);
glColor3f(1.0,0.0,0.0);
glVertex2f(2.5,2.5);
glColor3f(0.0,0.0,1.0);
glVertex2f(290.6,290.4);
glEnd();
glEndList();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glCallList(regHex);
glFlush();
}
void reshape(int w,int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,(GLdouble)w,0,(GLdouble)h);
glClear(GL_COLOR_BUFFER_BIT);
}
int main(int argc,char **argv)
{
glutInit(&argc, argv); //固定格式
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //缓存模式
glutInitWindowSize(400, 400); //显示框的大小
glutInitWindowPosition(20,20); //确定显示框左上角的位置
glutCreateWindow("绘制立方体");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop(); //进人GLUT事件处理循环
return 0;
}
程序非常的简单
glutReshapeFunc(reshape);
该函数它在显示窗口尺寸输入后立即激活。该GLUT函数的变量是接受新窗口宽度和高度的过程名。我们可以接着使用新尺寸去重新设置投影参数并完成任何其他操作,包括改变显示窗口颜色。