zoukankan      html  css  js  c++  java
  • OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系

    两个函数的函数原型如下:

    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函数(即默认整个窗口为视口)时,我们用鼠标将窗口拖大、缩小时,里面之前画的正方形会跟着窗口的变化一起变化,以至于会成为一个矩形的原因。

  • 相关阅读:
    【linux命令】命名管道(mkfifo)+ 结合xargs命令使用
    【SSH服务】远程连接管理服务SSH
    【VSFTP服务】rhel8安装vsftp软件
    【linux命令】关机和重启命令
    POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
    Windows下虚拟机安装Ubuntu15.10 Destop简易操作过程
    POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
    Ubuntu15.10下华南师大锐捷认证客户端的使用详解
    POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
    Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本
  • 原文地址:https://www.cnblogs.com/ymy124/p/2381075.html
Copyright © 2011-2022 走看看