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. CentOS 安装ftp

    Linux安装ftp组件 1 安装vsftpd组件 安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@bogon ~]# yum -y insta ...

  2. php 日期时间操作-可算出几天后的时间

    本文为大家介绍一下根据PHP时间戳获取当前时期的具体方式.strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实 ...

  3. 【leetcode❤python】226. Invert Binary Tree

    #-*- coding: UTF-8 -*- # Definition for a binary tree node.# class TreeNode(object):#     def __init ...

  4. 【leetcode❤python】119. Pascal's Triangle II

    #-*- coding: UTF-8 -*-#杨辉三角返回给定行#方法:自上而下考虑问题,从给定的一行计算出下一行,则给定行数之后,计算的最后一行就是求解的最后一行class Solution(obj ...

  5. js将数组元素随机排序的方法

    在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...

  6. Cheatsheet: 2014 01.15 ~ 01.30

    Web How to upload file in Node.js Create Echo Server in Node.js Near-Realtime Analytics with MongoDB ...

  7. Cheatsheet: 2013 09.10 ~ 09.21

    .NET Lucene.Net – Custom Synonym Analyzer Using FiddlerCore to Capture Streaming Audio Immutable col ...

  8. MyBatis 动态SQL查询,多条件,分页

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  9. 基于jQuery的简易瀑布流实现

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. winscp 软件。

    winscp 软件.是管理服务器的软件. 我们可以输入ip和password,对服务器上的代码进行管理.