通過上面一個程序我們可以發現一個問題或者說是一個優點,就是隨着顯示窗口的增大,顯窗口中顯示的圖像也會隨之增大,這個在很多界面語言中的需要完成的一個功能,現在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函數的變量是接受新窗口寬度和高度的過程名。我們可以接着使用新尺寸去重新設置投影參數並完成任何其他操作,包括改變顯示窗口顏色。