OpenGL二维观察函数
本节概念性内容较多,为便于理解与记忆,可以查看之前文章的实例中的函数操作
1. OpenGL投影模式
在选择OpenGL裁剪窗口和视口之前,必须建立合适的模式以便构建从世界坐标系到屏幕坐标系变换的矩阵,在OpenGL中,必须将裁剪窗口的参数作为投影变换的一部分来设置。因此,必须先选择投影模式。我们可以使用在几何变换中设定建模观察模式的函数来设置。
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glMatrixMode()这个函数其实就是对接下来要做什么进行一下声明,也就是在要做下一步之前告诉计算机我要对“什么”进行操作了,这个“什么”在glMatrixMode的“()”里的选项(参数)有,GL_PROJECTION,GL_MODELVIEW和GL_TEXTURE;如果参数是GL_PROJECTION,这个是投影的意思,就是要对投影相关进行操作,也就是把物体投影到一个平面上,就像我们照相一样,把3维物体投到2维的平面上。(这里参考了博客https://blog.csdn.net/jiangdf/article/details/8460012)
glLoadIdentity()是为了得到单位矩阵,以保证我们进行场景切换后,新的观察参数不会与前面的观察参数混在一起。
2. GLU裁剪窗口函数
定义一个二维裁剪窗口使用下列OpenGL函数:
gluOrtho2D(xwmin,xwmax,ywmin,ywmax);
裁剪边界的坐标位置使用双精度浮点数给出。该函数给出了将场景映射到屏幕的正交投影。对于三维场景来说,这意味着将对象沿垂直于二维xy平面的平行线投影。但是在二维投影中,对象是在二维xy平面中定义的。因此,正交投影对二维场景除了将对象位置转换到规范化坐标系之外没有其他作用。OpenGL裁剪函数使用-1到1的规范化坐标范围。
3. OpenGL视口函数
使用下列函数指定视口的参数
glvVewport(xvmin,yvmin,vpWidth,vpHeight);
这里的所有参数用对应于显示窗口的整数屏幕坐标给出。xvmin,yvmin指定视口左下角位置,与显示窗口的左下角对应。vpWidth,vpHeight用于设定视口的宽度像素数和高度像素数。如果我们并未在程序中使用glViewports,则默认视口大小及位置与显示窗口一样。
最后,视口中图元的像素颜色装入指定的屏幕位置的刷新缓存中。
4. 建立GLUT显示窗口
使用下面函数进行初始化。
glutInit(&argc,argv);
并使用以下三个GLUT函数用来定义显示窗口并选择其尺寸及位置:
glutInitWindowPosition(xTopLeft,yTopLeft);//设置显示窗口的左上角初始位置
glutInitWindowSize(dwWidth,dwHeight);//设置窗口大小,参数分别为宽和高
glutCreateWindow("Title");//标题
5. 设定GLUT显示窗口的模式和颜色
glutInitDisplayMode(mode);
这个函数用来选择颜色模式(RGB或索引号)和不同的缓存组合,如:
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
显示窗口的背景颜色使用:
glClearColor(red,green,blue,alpha);
在颜色索引模式下,我们用:
glClearIndex(index)
6. GLUT显示窗口标识
因为一个应用可以建立多个显示窗口,可使用以下函数获得显示整数窗口标识:
windowID=glutCreateWindow("Title");
7. 删除GLUT显示窗口
使用下面函数,删除一个窗口
glutDestroyWindow(windowID);
8. 当前GLUT显示窗口
指定的任何一个显示窗口操作都针对当前显示窗口,即最后建立的当前显示窗口,或使用下列命令指定的显示窗口:
glutSetWindow(windowId);
在任何时候,可以下列通过询问函数来确定当前的显示窗口是哪一个:
currentWindowId=glutGetWindow();
9. 修改GLUT显示窗口的位置和大小
如果要改变当前显示窗口的位置,使用
glutPositionWindow(xNewTopLeft,yNewTopLeft);
下面的函数设定显示窗口的尺寸
glutReshapeWindow(dwNewWidth,dwNewHeight);
使用下面的函数可将当前显示窗口扩展到整个屏幕
glutFullScreen();
无论何时改变现实窗口,都可能改变窗口的横纵比并使对象变形。可以使用下列语句来调整显示窗口的变化:
glutReshapeFunc(winReshapeFcn);
winReshapeFcn是一个“重定型事件”的“回调函数”。