您的位置:首页 > 运维架构

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函数(即默认整个窗口为视口)时,我们用鼠标将窗口拖大、缩小时,里面之前画的正方形会跟着窗口的变化一起变化,以至于会成为一个矩形的原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: