视截体用来表示一个空间的范围,位于这个空间范围内的三维场景的任何物体都可以被看到。

视截体由六个平面围成,其中的四个平面与场景的边界相对应,分别被称为左,右,底,顶视截面。另外两个平面称为近视截面和远视界面,它们定义了最近和最远距离。

视截体与摄像机空间是一致的,摄像机空间也称为眼球空间,它就是一个坐标系,在该坐标系下,摄像机位于原点,x轴指向右边,y轴指向上方,z轴的方向取决于所用的3D图形库。如OpenGL环境下,z轴的方向是摄像机所指方向的反方向,形成了右坐标系。Direct3D环境下,z轴方向与摄像机所指的方向一致,形成左坐标系。

                                                                                        OpenGL的摄像机空间

视域

            图(#1)                          图(#2)

如图(#1)所示,投影面是垂直于摄像机视线方向的一个平面,该平面位于与摄像机的距离为e的位置,分别与左右视截面交于x=-1和x=1处。距离e也叫做摄像机的焦距,它和左右两个视截面间的夹角a有关,a即水平视域角。

e与a的关系 : e = 1/tan(a/2) 可见焦距越短,则视域越宽。通过逐渐缩小视域角,可以放大摄像机所能看到的物体,同时焦距也在变长。

如图(#2)所示,垂直视域底视截面和顶视截面与投影面相交于y = -a 和y = a的位置。

显示器的屏幕高宽比等于它的高度除以宽度得到的值,例如一个640x480像素的显示器的高宽比是0.75,a就是显示器的屏幕高宽比。

就是垂直视域角。

视截体的四个边平面在投影面上切出了一个与摄像机的距离为e,且边为x = -1,x = 1和y = -a,y = a的矩形。

视截面

3D游戏与计算机图形学中的数学方法-视截体的更多相关文章

  1. 3D游戏与计算机图形学中的数学方法-变换

    1变换 在3D游戏的整个开发过程中,通常需要以某种方式对一系列的向量进行变换.通常用到的变换包括平移,缩放和旋转. 1.1通用变换 通常可将n x n可逆矩阵M看成是一个从坐标系到另一个坐标系的变换矩 ...

  2. 3D游戏与计算机图形学中的数学方法-四元数

    说实话关于四元数这一节真的是不好懂,因为里面涉及到好多数学知识,单说推出来的公式就有很多.不怕大家笑话,对于四元数的学习我足足花了两天的时间,包括整理出这篇文章.在前面一章我写到了“变换”,这也是总结 ...

  3. 3D游戏与计算机图形学中的数学方法-点线面

    <易传·系辞上传>:”易有太极,是生两仪,两仪生四象,四象生八卦.” 借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话相对应:由点成线,由 ...

  4. Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]

    最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...

  5. 3D游戏开发之UE4中的集合:TSet容器

    好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...

  6. 计算机图形学中使用Turbo C++画图步骤

    一.下载安装Turbo C++ 我安装的是Turbo C++ 3.2.2.0下载链接 二.画图 1.打开Turbo C++,点击右下角start turbo C++ 2.点击file ->new ...

  7. JS中的数学方法

    1 . Math.ceil()      向上取整 2.  Math.floor()     向下取整 3. Math.round()    四舍五入取整 4.  Math.random()   生成 ...

  8. Java中的数学方法

    直接用代码 public class TestNumber { public static void main(String[] args) { float f1 = 5.4f; float f2 = ...

  9. 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.

    本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...

随机推荐

  1. Eclipse中导入Git项目

    1.先将项目git到本地 2.导入刚刚git到本地项目 if(如果project带.calsspath .project 文件){ 直接用genaral导入或andorid project导入即可. ...

  2. springmvc+spring+mybatis+maven项目构建

    1.首先在myeclipse10中安装maven的插件,将插件放入D:\Program Files (x86)\myEclipse10\MyEclipse Blue Edition 10\dropin ...

  3. WCF小问题总汇

    1.Q: WCF服务有没有构造函数或者静态构造函数? A:都不可用 2.Q: WCF中如何使用全局变量? A:用session绑定,或者静态变量 3.Q: WCF在WPF一直报xaml错误 A:不要把 ...

  4. asp.net MVC学习的一些总结

    起初认为视图,控制器,模型它们是完全没有耦合的,真正用了一段时间MVC发现错了. 但通过抽象让他们完全没有耦合,也不是不可能. 1.奇怪的连接地址 用MVC之前,一直认为页面必然访问某个文件.用了MV ...

  5. linux 最常用的yum源remi

    Remi repository是包含最新版本php和mysql包的linux源. . Enterprise Linux (with EPEL) x86_64 wget https://dl.fedor ...

  6. ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE

    WM_CONCAT()方法 注意字符长度 SELECT BERTHCODE,tpf.freedatetype, ( SELECT WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT ...

  7. hdoj1010 Temperor of the bone

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  8. [转]C#通过Http发送Soap请求

    /// <summary>        /// 发送SOAP请求,并返回响应xml        /// </summary>        /// <param na ...

  9. GPIO实验(一)

    目标:点亮LED1.看原理图,找到对应的引脚和寄存器2.a.配置寄存器为输入/出引脚    GPFCON[9:8]=0b01  b.设置输出高/低电平    GPDAT[4]=0b0 1.预处理2.编 ...

  10. 字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16

    http://blog.csdn.net/longintchar/article/details/51079340 ****************************************** ...