OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
2013-12-17 23:44
337 查看
两个函数的函数原型如下:
glVertex(GLfloat x, GLfloat y);
gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
简单的说前者的两个参数所代表的坐标点,必须落在后者参数所形成的坐标系内,不然该点就在viewport之外。
举个例子:
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(9);
glBegin(GL_POINTS);
glVertex2f(67.0,67.0);//6行
glEnd();
glFlush();
}
void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-70.0,70.0,-70.0,70.0);//第十四行
}
如果第8行改为glVertex2f(80.0,80.0)这时就看不到这个点了。
在没有设置gluOrtho2D函数的情况下(2维的情况),默认为窗口的中心是(0,0),而到矩形的边的最远距离为0;参数大于0则该点又看不到了。
同时,在这里也凭平时的经验总结一下opengl中的一些函数的参照坐标
glViewport函数:它的原点(0,0)在所生产的窗口的坐下角。
gluOrtho,glBegin,glEnd函数:它们的原点是glViewport在glutCreatWindow函数所产生的窗口的上的投影(即视口)的中心。比如说画一个点glVertex2i(0,0),在没设置gluOrtho函数(即默认时),这个点在窗口的正中间。
glutMouseFunc(mymouse):此时鼠标指针的原点(0,0)在视口的最左上角。
参考坐标这么多,画图时我们脑海中想要画的图到底该怎么转换到窗口里去呢?个人认为,先假设没有设置视口(viewport),即glCreateWindow函数产生的那个窗口整个就是视口(viewport)。然后窗口的中心即是gluOrtho函数的原点,用gluOrtho函数裁剪窗口,然后就用glBegin一系列的函数画图(在所裁剪的窗口上),画完后图形已经固定,再考虑用glViewport函数将图形在glCreatWindow函数所产生的窗口上进行投影。假设刚才的裁剪窗口是一个正方形,你画的图形也是个正方形而视口(viewport)也是个正方形,那么最后在窗口中生成的图形也是个正方形如果画的是正方形,裁剪窗口也是正方形,但视口(viewport)不是一个正方形那最后得到的也不是一正方形,这就是为什么在没有设置glViewport函数(即默认整个窗口为视口)时,我们用鼠标将窗口拖大、缩小时,里面之前画的正方形会跟着窗口的变化一起变化,以至于会成为一个矩形的原因。
glVertex(GLfloat x, GLfloat y);
gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
简单的说前者的两个参数所代表的坐标点,必须落在后者参数所形成的坐标系内,不然该点就在viewport之外。
举个例子:
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(9);
glBegin(GL_POINTS);
glVertex2f(67.0,67.0);//6行
glEnd();
glFlush();
}
void init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-70.0,70.0,-70.0,70.0);//第十四行
}
如果第8行改为glVertex2f(80.0,80.0)这时就看不到这个点了。
在没有设置gluOrtho2D函数的情况下(2维的情况),默认为窗口的中心是(0,0),而到矩形的边的最远距离为0;参数大于0则该点又看不到了。
同时,在这里也凭平时的经验总结一下opengl中的一些函数的参照坐标
glViewport函数:它的原点(0,0)在所生产的窗口的坐下角。
gluOrtho,glBegin,glEnd函数:它们的原点是glViewport在glutCreatWindow函数所产生的窗口的上的投影(即视口)的中心。比如说画一个点glVertex2i(0,0),在没设置gluOrtho函数(即默认时),这个点在窗口的正中间。
glutMouseFunc(mymouse):此时鼠标指针的原点(0,0)在视口的最左上角。
参考坐标这么多,画图时我们脑海中想要画的图到底该怎么转换到窗口里去呢?个人认为,先假设没有设置视口(viewport),即glCreateWindow函数产生的那个窗口整个就是视口(viewport)。然后窗口的中心即是gluOrtho函数的原点,用gluOrtho函数裁剪窗口,然后就用glBegin一系列的函数画图(在所裁剪的窗口上),画完后图形已经固定,再考虑用glViewport函数将图形在glCreatWindow函数所产生的窗口上进行投影。假设刚才的裁剪窗口是一个正方形,你画的图形也是个正方形而视口(viewport)也是个正方形,那么最后在窗口中生成的图形也是个正方形如果画的是正方形,裁剪窗口也是正方形,但视口(viewport)不是一个正方形那最后得到的也不是一正方形,这就是为什么在没有设置glViewport函数(即默认整个窗口为视口)时,我们用鼠标将窗口拖大、缩小时,里面之前画的正方形会跟着窗口的变化一起变化,以至于会成为一个矩形的原因。
相关文章推荐
- OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
- OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
- OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
- 系统调用跟驱动程序中相应函数的参数对应关系
- openGL 中的glMatrixMode 以及对应参数的含义
- 系统调用和驱动程序中相应函数的参数对应关系
- 外键约束 以及 数据库中实体的对应关系(1==1,1==n,n==n)
- javascript入门系列演示·函数的定义以及简单参数使用,调用函数
- python 函数参数 调用的常见方法
- JS常见事件以及函数
- Servlet:Servlet与JSP九大内置对象的对应关系以及通过Servlet获取表单数据
- IO缓冲,php中的ob缓冲机制,以及socket、curl、fopen这些函数的底层关系
- nginx 常见参数以及重定向参数配置
- 视频参数介绍以及之间的关系(转自网络)
- Uploadify 3.2 参数属性、事件、方法函数详解以及配置
- C函数关于qsort最后一个函数指针参数指向的函数的返回值和升序排序的关系
- linux系统网络参数与配置文件对应关系
- await is a reserved word 以及将forEach方法的参数改为async函数出现的问题
- Python自学笔记之函数2——定义函数以及函数的参数
- x264命令参数与相关代码对应关系