透视投影详解
- 格式:docx
- 大小:147.72 KB
- 文档页数:11
说明透视投影的含义和种类
透视投影是一种创造3D效果的技术,它使得观众能够看到一幅
画面中存在的空间深度和关系。
它是一种绘画技术,在特定的角度内渲染3D空间,使物体有立体的效果。
它也是计算机图形学的基础技术,用于模拟三维空间。
透视投影的历史
透视投影的历史可以追溯到古希腊时期,当时的哲学家们使用一种名为“原子”的理论来解释世界的结构,其中,一种理论提出了一种空间,即贴近物体表面的点投影,通过这种投影可以将物体在空间中缩小,在这种情况下,被投影的物体将变得更加真实,那么就是所谓的透视投影。
透视投影的类型
根据不同的使用目的,透视投影分为直接投影和点投影两种类型。
直接透视投影是指在透视投影中,不使用任何立体变换,是在投影物体表面的点形成的线投影到画布上的技术。
它的优势在于使用简单,容易掌握,而且可以画出真实的图形,而需要强调的是,直接透视投影需要有正确的角度和投影面,因此需要计算准确的距离。
点投影是指在投影物体表面的点形成的投影,它将物体从某个视角变换到投影物体上,这一变换是由该视角中的多个点投影到投影面上,从而形成物体投影的终极形式。
总之,透视投影是一种绘画技术,它通过在特定的视角内渲染三维空间,使物体有立体的效果,而它的类型则分为直接投影和点投影
两种。
透视投影详解概述投影变换完成的是如何将三维模型显示到二维视口上,这是一个三维到二维的过程。
你可以将投影变换看作是调整照相机的焦距,它模拟了为照相机选择镜头的过程。
投影变换是所有变换中最复杂的一个。
视锥体视锥体是一个三维体,他的位置和摄像机相关,视锥体的形状决定了模型如何从camera space投影到屏幕上。
最常见的投影类型-透视投影,使得离摄像机近的物体投影后较大,而离摄像机较远的物体投影后较小。
透视投影使用棱锥作为视锥体,摄像机位于棱锥的椎顶。
该棱锥被前后两个平面截断,形成一个棱台,叫做View Frustum,只有位于Frustum内部的模型才是可见的。
透视投影的目的透视投影的目的就是将上面的棱台转换为一个立方体(cuboid),转换后,棱台的前剪裁平面的右上角点变为立方体的前平面的中心(下图中弧线所示)。
由图可知,这个变换的过程是将棱台较小的部分放大,较大的部分缩小,以形成最终的立方体。
这就是投影变换会产生近大远小的效果的原因。
变换后的x坐标范围是[-1, 1],y坐标范围是[-1, 1],z坐标范围是[0, 1](OpenGL略有不同,z值范围是[-1, 1])。
透视投影矩阵推导下面来推导一下透视投影矩阵,这样我们就可以自己设置投影矩阵了,就可以模拟神奇的D3DXMatrixPerspectiveLH函数的功能了。
那么透视投影到底做了什么工作呢?这一部分算是个难点,无论是DX SDK的帮助文档,还是大多数图形学书籍,对此都是一带而过,很少有详细讨论的,早期的DX SDK文档还讨论的稍微多一些,而新近的文档则完全取消了投影矩阵的推导过程。
我们可以将整个投影过程分为两个部分,第一部分是从Frustum 内一点投影到近剪裁平面的过程,第二部分是由近剪裁平面缩放的过程。
假设Frustum内一点P(x,y,z)在近剪裁平面上的投影是P'(x',y',z'),而P'经过缩放后的最终坐标设为P''(x",y",z")。
透视投影的含义和种类
透视投影是将一个物体的三维投射到平面上,观测者仅能看到物体投影到平面上部分图案,其中会涉及到多个视角的转换,它可以将空间或物体投影到一个特定目标平面上。
而透视投影分为以下几种:
(1)正交透视投影
正交透视投影是由三维物体映射到二维平面做平行投影形成图像,透视线平行并且永远不会交叉,它通常用于展示建筑图纸,比如英式建筑中使用的哥特式墙投影。
(2)异向透视投影
异向透视投影是由三个视点(正面、后面、右侧)视野投影到一个特定视点上,它可以清晰表现出投影的立体感,用的比较多的例子有平行四边形多边形投影并可绘制成主次图案、模型结构图和图标,常用于设计、建筑、商业设计等方面。
(3)投影折射
投影折射是从三维空间上将物体投射到二维平面上,垂直射入平面的
光照会折射,出现完全不同的视角,折射的表现形式多变,有艰深错落、分心群网、微型图案等,使用它可以让观众产生一种神秘的视觉,在视觉设计和广告设计上可以制作出有趣的图案、灯光效果等。
(4)等比例投影
等比例投影即物体内几何形状的比例保持不变,而投影区域发生变化。
此种投影方法用来表示直角坐标系统或空间中的图像,这种投影方式
用于服装设计等应用比较多,它可以明确的展示出投影的细节,如服
装的结构形状特征及位置特征等,使服装设计更具有实用性。
(5)视角投影
视角投影是由三角形的顶点投影到一个投影面上形成的一种投影方式,它可以解决视角不变、可视范围反复变化的问题,可以实现细究视角
景别,使观众以视觉体验物体真实状态,比如用于立体显示物体或地景,有利于更好的展示效果,在可视化技术领域有很重要的意义。
透视投影的详细解释(转载)本⽂乃<投影矩阵的推导>译⽂,原⽂地址为:译者: 流星上的潴如需转载,请注明出处,感谢!在3D图形程序的基本矩阵变换中,投影矩阵是其中⽐较复杂的。
平移和缩放浏览⼀下就能理解,旋转矩阵只要掌握了三⾓函数知识也可以理解,但投影矩阵有点棘⼿。
如果你曾经看过投影矩阵,你会发现你的常识不⾜以告诉你它是怎么来的。
⽽且,我在⽹上还未看到许多关于如何推导投影矩阵的教程资源。
本⽂的话题就是如何推导投影矩阵。
对于刚刚开始接触3D图形的⼈,我应该指出,理解投影矩阵如何推导可能是我们对于数学的好奇⼼,它不是必须的。
你可以只⽤公式,并且如果你⽤像Direct3D那样的图形API,你甚⾄都不需要使⽤公式,图形API会为你构建⼀个投影矩阵。
所以,如果本⽂看起来有点难,不要害怕。
只要你理解了投影矩阵做了什么,你没必要在你不想的情况下关注它是怎么做的。
本⽂是给那些想了解更多的程序员的。
概述: 什么是投影?计算机显⽰器是⼀个⼆维表⾯,所以如果你想显⽰三维图像,你需要⼀种⽅法把3D⼏何体转换成⼀种可作为⼆维图像渲染的形式。
那也正是投影做的。
拿⼀个简单的例⼦来说,⼀种把3D对象投影到2D表⾯的⽅法是简单的把每个坐标点的z坐标丢弃。
对⽴⽅体来说,看上去可能像图1:图1: 通过丢弃Z坐标投影到XY平⾯当然,这过于简单,并且在⼤多数情况下不是特别有⽤。
⾸先,根本不会投影到⼀个平⾯上;相反,投影公式将变换你的⼏何体到⼀个新的空间体中,称为规范视域体(canonical view volume),规范视域体的精确坐标可能在不同的图形API之间互不相同,但作为讨论起见,把它认为是从(-1, -1, 0)延伸⾄(1, 1, 1)的盒⼦,这也是Direct3D中使⽤的。
⼀旦所有顶点被映射到规范视域体,只有它们的x和y坐标被⽤于映射到屏幕上。
这并不代表z坐标是⽆⽤的,它通常被深度缓冲⽤于可见度测试。
这就是为什么变换到⼀个新的空间体中,⽽不是投影到⼀个平⾯上。
透视投影与景深的绘画技巧绘画是一门艺术,通过创造性的使用色彩、线条和形状,艺术家可以创造出令人惊叹的作品。
其中,透视投影和景深是绘画中非常重要的技巧,它们能够帮助艺术家更加准确地表现现实世界的立体感和深度。
一、透视投影透视投影是一种通过透视原理来绘制真实或虚拟物体的方法。
它的基本原理是根据物体到观察者之间的距离和相对位置,而形成线条的收敛,使观察者能够产生一种立体感。
透视投影主要分为一点透视和两点透视。
1. 一点透视一点透视也称为单点透视,它通过以单个点作为所有线条的收敛点,来模拟远近视觉效果。
通常,画家将远离观察者的物体绘制在这个收敛点上方,而离观察者近的物体则绘制在此点下方。
这样一来,画中的物体会呈现出逐渐变小和收敛的趋势,创造出了深度感。
2. 两点透视两点透视又称为双点透视,它使用两个不在同一水平线上的点作为线条的收敛点。
这种透视方式常用于绘制建筑物或其他具有明显垂直和水平线条的物体。
在两点透视中,画家需要将物体的垂直线条与其中一个收敛点对齐,水平线条则与另一个收敛点对齐。
通过这种方法,艺术家可以在绘画中创造出更多的空间感和逼真感。
二、景深景深是指通过控制焦点使图像中的某些部分清晰,而其他部分模糊或者不太清晰的效果。
这种效果常常用于表现远近距离的变化,增强绘画的立体感。
1. 前景景深在绘画中,前景景深通常用于将前景与背景区分开来。
前景物体通常会被描绘得更加清晰,而背景物体则会被描绘得模糊或者轻描淡写。
通过这种方式,艺术家可以使前景物体更加突出,并且吸引观众的注意力。
2. 后景景深后景景深则是通过模糊或者减少细节的绘制来表现远处的景物。
在自然情况下,远处的物体由于空气中的湿度或者灰尘等原因,会呈现出模糊的效果。
艺术家可以利用后景景深来模拟这种效果,增强绘画的深度感。
三、技巧和实践1. 研究透视原理要想熟练运用透视投影和景深技巧,艺术家需要深入了解透视原理的基本知识。
学习透视投影和景深的规则,可以帮助艺术家更准确地绘制物体的形状和位置。
透视投影透视投影最显著的特征就是透视缩短,物体距离照相机越远,它在最终图像中看上去就越小。
这是因为透视投影的视景体可以看成是一个金字塔的平截头体(顶部被一个平行于底面的平面截除)。
位于视景体之内的物体被投影到金字塔的顶点,也就是照相机或观察点的位置。
靠近观察点的物体看上去更大一些,因为和远处的物体相比,它们占据了视景体中相对较大的区域。
这种投影方法常用于动画、视觉模拟以及其他要求某种程度的现实感的应用领域,因为它和我们在日常生活中观察事物的方式相同。
glFrustum()函数定义了一个平截头体,它计算一个用于实现透视投影的矩阵,并把它与当前的投影矩阵(一般为单位矩阵)相乘。
记住,视景体用于裁剪那些位于它之外的物体。
平截头体的4个侧面、顶面和底面对应于视景体的6个裁剪平面,如图3-13所示。
位于这些平面之外的物体(或物体的一部分)将裁剪掉,1.void glFrustum(GLdouble left, GLdouble right,2.GLdouble bottom, GLdouble top,3.GLdouble near, GLdouble far);创建一个表示透视视图平截头体的矩阵,并把它与当前矩阵相乘。
平截头体的视景体是由这个函数的参数定义的:(left, bottom, -near)和(right, top, -near)分别指定了近侧裁剪平面左上角和右下角的(x, y, z)坐标。
near和far分别表示从观察点到近侧和远侧裁剪平面的距离,它们的值都应该是正的。
平截头体在三维空间中有一个默认的方向。
可以在投影矩阵上执行旋转或移动,对这个方向进行修改。
但是,这种做法难度较大,因此最好还是避免。
高级话题平截头体并不一定要求是对称的,它的轴也并不需要与z 轴对齐。
例如,可以使用glFrustum()函数绘制一幅图片,就像透过房子右上角的一个矩阵窗口向外观察一样。
摄像师使用这种视景体创建人工透视效果。
投影透视课程知识点总结一、投影透视的基本概念1. 透视的定义透视是一种通过线条和色彩来表现物体远近、大小和空间关系的绘画技巧。
透视是3D世界投影到2D平面上的一种方法,通过变换和缩放来表现物体的形态和空间感。
2. 透视的分类在投影透视中,我们通常会接触到线性透视和大气透视。
线性透视是通过水平线和消失点来表现物体远近和空间关系的方法,大气透视则是通过色彩和对比来表现远近的效果。
3. 透视的原理投影透视的原理是基于人类的视觉系统和光线传播的规律,通过观察物体在不同角度和距离下的变化来理解透视的规律和表现方式。
二、投影透视的基本技巧1. 比例和尺寸在投影透视中,正确的比例尺寸是非常重要的,通过准确地掌握比例和尺寸,我们可以更真实地表现物体的形态和大小,也可以更好地理解物体的空间关系。
2. 透视线和消失点透视线和消失点是投影透视中的基本概念,通过观察物体在不同角度下的透视线和消失点,我们可以更准确地表现物体的远近和空间关系。
3. 光影和色彩投影透视中,光影和色彩是非常重要的因素,通过准确地表现光影和色彩,我们可以更生动地表现物体的立体感和空间感。
4. 素描和构图素描和构图是投影透视中的基本技巧,通过精细的素描和构图,我们可以更准确地表现物体的形态和空间关系,也可以更丰富地表现物体的立体感和空间感。
三、投影透视的应用领域1. 绘画投影透视在绘画领域中有着非常广泛的应用,通过准确地表现透视和空间感,我们可以创作出更真实和立体的作品,也可以更好地表现物体的远近和大小。
2. 设计在设计领域中,投影透视也有着非常广泛的应用,通过准确地表现透视和空间感,我们可以创作出更具有立体感和空间感的设计作品,也可以更好地表达设计意图和效果。
3. 建筑在建筑领域中,投影透视是非常重要的,通过准确地表现透视和空间感,我们可以更好地理解和表现建筑的结构和空间关系,也可以更好地表达建筑的设计意图和效果。
四、投影透视的学习方法和技巧1. 多观察和实践学习投影透视需要多观察和实践,通过观察物体在不同角度下的变化和实践绘制不同透视的物体,我们可以更好地理解和掌握透视的表现方法和技巧。
透视投影透视投影是用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。
它具消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。
透视投影也称为透视图,简称透视。
在建筑设计过程中,透视图常用来表达设计对象的外貌,帮助设计构思,研究和比较建筑物的空间造型和立面处理,是建筑设计中重要的辅助图样。
透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。
它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。
这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
在平行投影中,图形沿平行线变换到投影面上;对透视投影,图形沿收敛于某一点的直线变换到投影面上,此点称为投影中心,相当于观察点,也称为视点。
平行投影和透视投影区别在于透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的。
当投影中心在无限远时,投影线互相平行,所以定义平行投影时,给出投影线的方向就可以了,而定义透视投影时,需要指定投影中心的具体位置平行投影保持物体的有关比例不变,这是三维绘图中产生比例图画的方法。
物体的各个面的精确视图可以由平行投影得到。
另一方面,透视投影不保持相关比例,但能够生成真实感视图。
对同样大小的物体,离投影面较远的物体比离投影面较近物体的投影图象要小,产生近大远小的效果.透视投影的原理和实现by Goncely摘要:透视投影是3D渲染的基本概念,也是3D程序设计的基础。
掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用。
本文详细介绍了透视投影的原理和算法实现,包括透视投影的标准模型、一般模型和屏幕坐标变换等,并通过VC实现了一个演示程序。
1 概述在计算机三维图像中,投影可以看作是一种将三维坐标变换为二维坐标的方法,常用到的有正交投影和透视投影。
正交投影多用于三维健模,透视投影则由于和人的视觉系统相似,多用于在二维平面中对三维世界的呈现。
第六章透视投影
透视投影的基本知识
一、概述
1.意义――具有超前照片作用。
除了供设计人员本身研究、分析建筑物的体型和布局等外,更可供他人对建筑物予以了解、评价和欣赏。
2.方法――用中心投影法。
人们透过一个面来视物体时,将视线与画面的交点顺次连接而形成的图形。
3.优缺点――和轴测相比,因透视图是用中心投影绘制,因此立体感更强,但作图复杂化、度量性较差。
二、常用术语
基面―――方置建筑物的平面,一般以水平面H作为基面。
画面―――绘制透视图的投影平面,一般以垂直基面的铅垂面为画面,也可理解为V面。
基线―――画面与基面的交线OX。
视点―――眼睛所在的位置,即投影中心,Array用大写字母S表示。
站点―――视点S在基面H上的正投影s。
心点―――视点S在画面V上的正投影s¹。
视平面――过视点S所作的水平面Q。
视平线――视平面与画面的交线,以h—h
表示。
视高―――视点S到基面H的距离,即人眼的高度Ss。
视距―――视点S到画面V的距离Ss¹。
透视———视线SA与画面V的交点AO
基透视―――是空间点A在基面H上的正投影a的透视a o
1。
说明透视投影的含义和种类
透视投影是一种重要的技术,用于将物体在容纳它们的空间中投影到同一维度。
它允许用户从前后,上下和左右的视角来看物体,从而让用户更好地理解几何形状和对象的结构。
透视投影可以用于几乎任何领域,包括图像处理,游戏开发,实时图形,虚拟现实,机器人机器,机械设计和建筑可视化等。
透视投影的主要含义是,当一个物体被投射到一个平面时,它会失去原有的宽度和高度,使物体变得更短,更小,看起来像是伸展到远处。
它在视觉上提供了一种深度感,使用户可以更好地把握距离,把握视觉层次,以及看到物体的立体效果。
透视投影可分为三种:斜交透视投影、正交透视投影和声景图(又称曲线投影)。
斜交透视投影是最常用的投影技术,它可以在多维度投射物体,允许用户从不同的视角来看物体。
它的优势在于容易理解,但缺点是结果的精度较低。
正交透视投影可以使物体更加接近它们的实物,这是由于投影方式的不同而产生的宽度比例差异。
正交透视投影相对来说更贴近实物,所以在图像处理方面使用得更多,但它的缺点是投影结果准确度较低。
最后一种投影是声景图,它在多维度投射物体,但会将画面矫正为椭圆或曲线形状,比如地图上的投影,相当于把球形地球投射到二维平面上,通常用在建筑可视化中。
总而言之,透视投影是一项重要的技术,可以应用于多个领域。
它可以帮助用户更好地理解投影到同一维度的物体,从而更好地把握距离,把握视觉层次,增强视觉效果等。
此外,透视投影可以分为三
种:斜交透视投影、正交透视投影和声景图。
透视投影透视投影是用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。
它具消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。
透视投影也称为透视图,简称透视。
在建筑设计过程中,透视图常用来表达设计对象的外貌,帮助设计构思,研究和比较建筑物的空间造型和立面处理,是建筑设计中重要的辅助图样。
透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。
它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。
这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
在平行投影中,图形沿平行线变换到投影面上;对透视投影,图形沿收敛于某一点的直线变换到投影面上,此点称为投影中心,相当于观察点,也称为视点。
平行投影和透视投影区别在于透视投影的投影中心到投影面之间的距离是有限的,而平行投影的投影中心到投影面之间的距离是无限的。
当投影中心在无限远时,投影线互相平行,所以定义平行投影时,给出投影线的方向就可以了,而定义透视投影时,需要指定投影中心的具体位置平行投影保持物体的有关比例不变,这是三维绘图中产生比例图画的方法。
物体的各个面的精确视图可以由平行投影得到。
另一方面,透视投影不保持相关比例,但能够生成真实感视图。
对同样大小的物体,离投影面较远的物体比离投影面较近物体的投影图象要小,产生近大远小的效果.透视投影的原理和实现by Goncely摘要:透视投影是3D渲染的基本概念,也是3D程序设计的基础。
掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用。
本文详细介绍了透视投影的原理和算法实现,包括透视投影的标准模型、一般模型和屏幕坐标变换等,并通过VC实现了一个演示程序。
1 概述在计算机三维图像中,投影可以看作是一种将三维坐标变换为二维坐标的方法,常用到的有正交投影和透视投影。
正交投影多用于三维健模,透视投影则由于和人的视觉系统相似,多用于在二维平面中对三维世界的呈现。
透视投影(Perspective Projection)是为了获得接近真实三维物体的视觉效果而在二维的纸或者画布平面上绘图或者渲染的一种方法,也称为透视图[1]。
它具有消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。
透视投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。
2 透视投影的原理基本的透视投影模型由视点E和视平面P两部分构成(要求E不在平面P上)。
视点可以认为是观察者的位置,也是观察三维世界的角度。
视平面就是渲染三维对象透视图的二维平面。
如图1所示。
对于世界中的任一点X,构造一条起点为E并经过X点的射线R,R与平面P的交点Xp即是X点的透视投影结果。
三维世界的物体可以看作是由点集合 { Xi} 构成的,这样依次构造起点为E,并经过点Xi的射线Ri,这些射线与视平面P的交点集合便是三维世界在当前视点的透视图,如图2所示。
图1 透视投影的基本模型[2]_图2 透视图成像原理[6]基本透视投影模型对视点E的位置和视平面P的大小都没有限制,只要视点不在视平面上即可。
P无限大只适用于理论分析,实际情况总是限定P为一定大小的矩形平面,透视结果位于P之外的透视结果将被裁减。
可以想象视平面为透明的玻璃窗,视点为玻璃窗前的观察者,观察者透过玻璃窗看到的外部世界,便等同于外部世界在玻璃窗上的透视投影(总感觉不是很恰当,但想不出更好的比喻了)。
当限定P的大小后,视点E的可视区间(或叫视景体)退化为一棱椎体,如图3所示。
该棱椎体仍然是一个无限区域,其中视点E为棱椎体的顶点,视平面P为棱椎体的横截面。
实际应用中,往往取位于两个横截面中间的棱台为可视区域(如图4所示),完全位于棱台之外的物体将被剔除,位于棱台边界的物体将被裁减。
该棱台也被称为视椎体,它是计算机图形学中经常用到的一个投影模型。
图3 有限视平面的可视区间[3]图4 透视投影的视椎体模型[3]3 透视投影的标准模型设视点E位于原点,视平面P垂直于Z轴,且四边分别平行于x轴和y轴,如图5所示,我们将该模型称为透视投影的标准模型,其中视椎体的近截面离视点的距离为n,远截面离视点的距离为f,且一般取近截面为视平面。
下面推导透视投影标准模型的变换方程。
图5 透视投影的标准模型[4]设位于视椎体内的任意一点X (x, y, z) 在视平面的透视投影为Xp (xp, yp, zp),从点X和Xp做z轴的垂线,并分别在X-Z平面和Y-Z平面投影,图6是在X-Z平面上的投影结果。
图6 透视投影的相似三角形[6]根据三角形相似原理,可得:xp/n = x/z, yp/n = y/z解上式得:xp = x*n/z, yp = y*n/z, zp = n.上式便是透视投影的变换公式,非常简单,不是吗?需要说明的是,由于透视点始终位于视平面,所以zp恒等于n,实际计算的时候可以不考虑zp。
另外还可以从照相机模型来考虑透视投影。
将视点E想象为一个虚拟的照相机,视平面想象为胶片,那么图5 也是一个标准的照相机模型。
PS:上述讨论都是基于矩形视平面来考虑的,其实我们可以取视平面为任意形状,比如圆形,此时视景体变为一个圆锥体,当然现在好像还没有圆形的显示装置。
另外,我还曾考虑将视平面取为凹面或凸面,此时的投影结果应该是哈哈镜效果吧(纯属想象,没有验证)。
还可以想象将视平面放在E的另外一面,这时的投影图像是倒置的,但是不是更接近人的视觉成像模型?另外还可以考虑有两个甚至更多视点的透视投影,总之充分发挥你的相像,或许能得到意想不到的结果。
4 透视投影的一般模型令世界坐标系的x轴指向屏幕的右方,y轴指向屏幕的上方,z轴指向屏幕外(右手坐标系)。
我们在讨论标准模型的时候,曾假设E的坐标为原点,其实视点E除了有位置属性外,还有姿态属性,通常用[L U D]表示(D3D中用的是[R U D]表示),其中L表示视点的左向(Left),U表示上方(Up),D表示朝向(Direction)。
在标准模型中,有L=[-1,0,0]T , U=[0,1,0]T , D=[0,0,-1]T。
透视投影的一般模型研究视点E在任意位置,任意姿态下透视图的生成算法。
思路很简单,先将一般模型变换为标准模型,然后使用标准模型的透视投影公式便能计算透视结果。
下面研究一般模型变换为标准模型的数学公式。
设一般模型中的点X,其对应在标准模型中的点为Y,那么当视点位于E,姿态为R时,X和Y有如下关系:X = E+RY反过来有:Y = R-1 (X-E)通常取R为正交阵,即R-1 =R T,故有Y = R T (X-E)把上式改写成齐次矩阵(Homogeneous matrix )的形式有:式中H view便是透视投影从一般模型到标准模型的变换矩阵。
5 转换为屏幕坐标对于透视投影的标准模型,视平面的坐标模型如图 7 所示,它的坐标原点位于视平面的中心, x 轴正向水平向右, y 轴正向垂直向上。
要把透视投影的结果在计算机屏幕上显示的话,需要对透视图进行坐标变换,将其从视平面坐标系转换到屏幕坐标系。
图7 视平面坐标模型计算机屏幕的坐标模型如图 8 所示,它的原点位于屏幕的坐上角, y 轴正向垂直向下。
设视平面的宽度为 Wp ,高度为 Hp ;屏幕的宽度为 Ws ,高度为 Hs 。
图8 屏幕坐标模型[5]令视平面坐标系中的点( xp, yp )对应于屏幕坐标系中的点( xs, ys ),它们的变换关系如下:xs = a*xp + b;ys = c*yp + d由图 7 和图 8 可知,视平面中的( 0, 0 )点对应于屏幕坐标系中的中心点( 0.5*Ws-0.5, 0.5*Hs-0.5 )( PS :由于屏幕坐标系是离散坐标系,所有屏幕右下点的坐标为( Ws-1, Hs-1 ),而不是( Ws, Hs ));另外,视平面的( -0.5*Wp, -0.5*Hp )对应于屏幕的( 0, 0 )点。
将上述两种取值代入变换方程可以得出:上式便为视平面坐标系到屏幕坐标系的变换方程。
6 透视投影的实现6.1 载入3D模型使用Matt Fairfax实现的Model_3DS类支持3DS模型文件的载入,该类的实现非常简单,而且很容易使用,具体可参考[7]。
由于本文的DEMO只需要其中的模型载入功能,所以对源代码进行了删减,去掉了纹理加载(暂不需要)和渲染(我们自己实现)代码,在析构函数中添加了资源释放代码。
6.2 视图变换为表示透视投影的一般模型,实现了KCamera类,除保存视点的位置和姿态,还保存视图变换矩阵m_kmView,随着视点位置和姿态的变化,视图矩阵也不断更新,更新算法详见第4节。
对于世界坐标系中的任何一点v(x, y, z),通过v = m_kmView*v将其变换到透视投影的标准模型坐标系,详见KCamera::Transform函数。
6.3 透视变换KFrustum类用来对透视投影的标准模型进行建模,其成员包括视平面的尺寸大小,以及近截面和远截面的z轴坐标。
KFrustum通过Project函数将视图变换的结果变换为透视坐标。
算法的原理见第3节,代码实现如下:void KFrustum::Project(KVector3& v){// xp = x*n/z, yp = y*n/z, zp = n.float fFactor = GetNear()/v.z;v.x *= fFactor;v.y *= fFactor; v.z = GetNear(); }。