• OpenGL的gluLookAt和glOrtho的关系


    OpenGL的gluLookAt和glOrtho的关系

    一直不明白gluLookAt()和glOrtho()两者之间的关系:
    gluLookAt()是观察变换,glOrtho()是正交投影。
    glLookAt()是摄像机的位置,glOrtho()是将当前的可视空间设置为正投影空间。
    gluLookAt()作用MODELVIEW矩阵,glOrtho()作用PROJECTION矩阵。

    可有时画的图形看不见,有时又可以看见,那它们到底有什么联系呢?我们往下看:

    先看看这两个函数的定义:
    void glOrtho(GLdouble left,
             GLdouble right,
              GLdouble bottom,
              GLdouble top,
              GLdouble near,
              GLdouble far);

    void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,
              GLdouble centerx, GLdouble centery, GLdouble centerz,
              GLdouble upx, GLdouble upy, GLdouble upz);

    代码实例:

    glOrtho(-1,1,-1,1,-3,3);
    gluLookAt(0,0,2.9,0,0,0,0,1,0);
    
    glColor3f(1.0, 0.0, 0.0);
    glViewport(0, 0, 400, 400);
    glBegin(GL_LINES);
        glVertex3f(-1.0, 0,-0.1);
        glVertex3f(1.0, 0 ,-0.1);
        glVertex3f(0.0, -1.0,-0.1);
        glVertex3f(0.0, 1.0 ,-0.1);
    glEnd();

    使用gluLookAt函数设定的摄像机范围,但是其视野就是glOrtho中的near和far。如上面的那个程序其远近在(2.9+3,2.9-3)这个范围内,所以-0.1刚好擦边,这两条线还能看到。

    而且,如果你的图形画在了摄像机的后面,可是在<5.9这个范围内(这两个视野的范围都是开区间),还是可以看到图形的。

    所以为了逻辑上的对应,我们应该将near和far都写成正的,这个正的方向是指的,从摄像机指向负轴方向的距离。

  • 相关阅读:
    linux 静态库和动态库(共享库)的制作与使用(注意覆盖问题)转
    手机号码格式正则表达式
    项目去除TFS关联、迁移重部署
    Excel中VLOOKUP函数的用法和注意点
    自定义打赏插件
    分享一个无需注册,无次数限制的Smile聊天机器人接口
    TCP/IP
    Java字典树
    平衡二叉树结构 AVL
    二叉搜索树(二叉排序树)BST
  • 原文地址:https://www.cnblogs.com/1024Planet/p/5644426.html
Copyright © 2020-2023  润新知