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(-,,-,,-,);
gluLookAt(,,2.9,,,,,,); glColor3f(1.0, 0.0, 0.0);
glViewport(, , , );
glBegin(GL_LINES);
glVertex3f(-1.0, ,-0.1);
glVertex3f(1.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都写成正的,这个正的方向是指的,从摄像机指向负轴方向的距离。

OpenGL的gluLookAt和glOrtho的关系的更多相关文章

  1. !gluLookAt与glOrtho 参数解析

    void gluLookAt( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLd ...

  2. OpenGL的gluLookAt观察变换函数详解

    void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,                          GLdouble center ...

  3. OpenGL的gluPerspective和gluLookAt的关系[转]

    函数原型void gluLookAt(GLdoble eyex, GLdouble eyey, GLdouble eyez,  GLdouble centerx, GLdouble centery, ...

  4. 再议gluPerspective和gluLookAt的关系

    http://www.cnblogs.com/chengmin/archive/2011/09/12/2174004.html 看了Opengl的相关程序,发现有些东西还是特别迷茫,尤其是gluLoo ...

  5. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

  6. OpenGl从零开始之坐标变换

    http://www.tuicool.com/articles/uiayYrI OpenGL学习脚印: 坐标变换过程(vertex transformation) http://blog.csdn.n ...

  7. OpenGL入门学习(转)

    OpenGL入门学习 http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#includ ...

  8. OpenGL理解

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  9. OpenGL入门学习(转载)

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

随机推荐

  1. 深入Linux网络核心堆栈(对于netfilter的用法和讲解)

    http://blog.csdn.net/wswifth/article/details/5115475 注册一个hook函数是围绕nf_hook_ops数据结构的一个非常简单的操作,nf_hook_ ...

  2. selenium帮助手册以及 webdriver的各种driver

    帮助手册 http://selenium-python.readthedocs.io/locating-elements.html 转载于:http://blog.csdn.net/five3/art ...

  3. 2016年12月8日 星期四 --出埃及记 Exodus 21:3

    2016年12月8日 星期四 --出埃及记 Exodus 21:3 If he comes alone, he is to go free alone; but if he has a wife wh ...

  4. Prompt isNaN 数组 function DOM window.open/close/location/history

    1.prompt的利用 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defa ...

  5. 解决discuz论坛搬家:“Table ‘common_syscache’ is read only”问题

    解决discuz论坛搬家:“Table ‘common_syscache’ is re http://www.zixuephp.com/wzht/discuz/20141203_11562.html ...

  6. 关于myeclipse中maven项目转换相关设置

    关于myeclipse中maven项目转换相关设置 在myeclipse菜单中,Configure->Convert to Maven Project 这个菜单 如果没有的话,需要做如下设置: ...

  7. 【转】Ajax中send方法参数的使用(get/post)

    Ajax中send方法参数的使用 一般情况下,使用Ajax提交的参数多是些简单的字符串,可以直接使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null. 例如 : ...

  8. Hibernate 配置 转(http://blog.csdn.net/b671900/article/details/39156065)

    做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...

  9. [SAP ABAP开发技术总结]文本文件、Excel文件上传下传

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. [C和指针]第四部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...