3D游戏与计算机图形学中的数学方法-视截体
视截体用来表示一个空间的范围,位于这个空间范围内的三维场景的任何物体都可以被看到。
视截体由六个平面围成,其中的四个平面与场景的边界相对应,分别被称为左,右,底,顶视截面。另外两个平面称为近视截面和远视界面,它们定义了最近和最远距离。
视截体与摄像机空间是一致的,摄像机空间也称为眼球空间,它就是一个坐标系,在该坐标系下,摄像机位于原点,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游戏与计算机图形学中的数学方法-视截体的更多相关文章
- 3D游戏与计算机图形学中的数学方法-变换
1变换 在3D游戏的整个开发过程中,通常需要以某种方式对一系列的向量进行变换.通常用到的变换包括平移,缩放和旋转. 1.1通用变换 通常可将n x n可逆矩阵M看成是一个从坐标系到另一个坐标系的变换矩 ...
- 3D游戏与计算机图形学中的数学方法-四元数
说实话关于四元数这一节真的是不好懂,因为里面涉及到好多数学知识,单说推出来的公式就有很多.不怕大家笑话,对于四元数的学习我足足花了两天的时间,包括整理出这篇文章.在前面一章我写到了“变换”,这也是总结 ...
- 3D游戏与计算机图形学中的数学方法-点线面
<易传·系辞上传>:”易有太极,是生两仪,两仪生四象,四象生八卦.” 借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话相对应:由点成线,由 ...
- Mathematics for Computer Graphics数学在计算机图形学中的应用 [转]
最近严重感觉到数学知识的不足! http://bbs.gameres.com/showthread.asp?threadid=10509 [译]Mathematics for Computer Gra ...
- 3D游戏开发之UE4中的集合:TSet容器
好久没有更新了,最近一直在老家过年,网络不通的,今天才有时间更新一集. 一.TSet<T>是什么 UE4中,除了TArray动态数组外,还提供了各种各样的模板容器.这一节,我们就介绍集合容 ...
- 计算机图形学中使用Turbo C++画图步骤
一.下载安装Turbo C++ 我安装的是Turbo C++ 3.2.2.0下载链接 二.画图 1.打开Turbo C++,点击右下角start turbo C++ 2.点击file ->new ...
- JS中的数学方法
1 . Math.ceil() 向上取整 2. Math.floor() 向下取整 3. Math.round() 四舍五入取整 4. Math.random() 生成 ...
- Java中的数学方法
直接用代码 public class TestNumber { public static void main(String[] args) { float f1 = 5.4f; float f2 = ...
- 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...
随机推荐
- cocos2dx 3.3 场景切出时RenderTexture crash
在cocos2dx 3.3中下面myScene在切出时会存在概率性崩溃(代码作了最大程度简化,仅为说明问题): class CmyLayer:public Layer{ public: CmyLaye ...
- PHP笔试题
1.不用新变量直接交换现有两个变量的值 (1)list($a,$b)=array($b,$a); (2)a=a+b,b=a-b,a=a-b 2.PHP数字金额转大小格式,同时说明思路 function ...
- 【C语言】给一组组数,仅仅有两个数仅仅出现了一次,其它全部数都是成对出现的,找出这两个数。
//给⼀组组数,仅仅有两个数仅仅出现了一次.其它全部数都是成对出现的,找出这两个数. #include <stdio.h> int find_one_pos(int num) //找一个为 ...
- 【Android】6.3 ProgressDialog
分类:C#.Android.VS2015: 创建日期:2016-02-08 一.简介 进度条对话框(ProgressDialog)常用于不能在短时间内快速完成的操作,显示进度条的目的是为了让用户明白程 ...
- Tomcat Jboss Glassfish 三种常见web容器比较
一.缘由: 新公司平台是纯Java架构,有用到Java Web(JSP).Java 业务(EJB).Nginx..Websphere MQ.Mysql这样.大家知道java是跑在容器里的, 这里的业务 ...
- onethink迁移
修改applicattion下面的Common跟User里面的config.php文件两个
- hdoj 1698 Just a Hook 【线段树 区间更新】
题目大意:有一段链子.初始的时候是铜的(价值为1),n代表有n段(1~n),输入a, b, c三个数分别表示将从a到b的链子的价值改为c, 最后问你经过多次改变之后的总价值. 策略:这道题是简单的线段 ...
- 常用的Eclipse设置
每次新建work space的时候,我都要修改一些默认设置,每次都要花一些时间找在哪里设置,总结如下. 启动加速 1. 去掉XML Validataion Windows --> Prefere ...
- 工具WinSCP:windows和Linux中进行文件传输
工具WinSCP:windows和Linux中进行文件传输 2016-09-21 [转自]使用WinSCP软件在windows和Linux中进行文件传输 当我们的开发机是Windows,服务器是Lin ...
- python 字典格式嵌套,相同项做叠加
all_dict = {} for tg_id in ['com.qq_a','com.qq_b','com.qq_c','com.qq_c']: tmp_dict = all_dict.get(tg ...