投影

一、投影
    尽管我们创建的世界是3D的,但是我们观察这个世界的界面却是其2D的显示。为了处理这个问题,我们要依赖于投影的概念。投影从本质上来说就是将3D世界坐标“投射”到2D显示屏幕上去的处理过程。
在3D图形学中我们所要涉及到的有两种投影。第一类,叫做平行投影,其投影时所有物体无论它们相对于投影平面的距离远近,其在投影平面上的投影大小比例保持不变。投影平面可以被认为是对着3D世界的摄像镜头,所有可见的3D点都要投射到这个2D平面上。第二类投影叫透视投影,是基于物体相对于投影平面的距离来确定其投影大小的。其投影时,3D空间中的物体的所有投射光线会聚于观察者的眼睛这一点。
1、平行投影
    平行投影通常是CAD工程师在制图时用来从不同视角表现物体的。这些视角的视图也叫做正投影视图。在CAD中,顶视图、前视图和侧视图是最常用的正投影视图,因为它们能给观察者提供充分的信息来想像物体的形状。
    平行投影可以分为两步来完成。第一步先要将投影平面变换到3D空间中的XY平面上,这一变换是完成第二步的前提条件:第二步就是除去所有可见点的Z项坐标信息,这也就将空间中物体的深度信息除去了,使得物体的投影保持原大小比例不变,而不考虑它们相对于观察者的距离。
    虽然平行投影对于CAD应用可能很适合,但是此投影不能产生出透视投影所能生成的真实感效果,因为它丢失了深度信息。正是因为这个原因,我们在3D游戏和演示程序中主要使用透视投影。
2、透视投影
    正如前面所述,透视投影生成图像,其中的物体的大小是基于该物体相对于观察者的距离的。举个例子来说,一个物体的透视投影在该物体离观察者远的时候比它离观察者近的时候要显得小。
    进行透视投影时,空间中物体所反射的所有光线都会聚到观察者的眼睛这一点。这与人眼睛看东西十分相似。现在想像眼球外面有一个投影平面,由于所有的光线都会聚到观察者的眼睛,这些光线就会与此投影平面相交并在其上产生相应的交点,这些点就是3D世界投射在2D平面上的影像。
    透视投影的主要思路就是确定反射光线与投影平面交点的位置。这可以借助于一个透视变换矩阵来完成。不过先让我们看看焦距这个概念。
    观察者与投影平面之间的距离定义为焦距。在3D图形学中,焦距特别的重要,它决定了视场角度。随着焦距的增大,视场变小或者变窄。当焦距减小时,视场变大。在开发3D游戏或演示程序时,为了获得更具有真实感的图像,通常要尝试多种焦距,这是因为透视变换的使用有可能会对图像产生扭曲失真。
    说到透视变换,该是我们讨论透视变换矩阵的时候了。首先要清楚为了进行透视透视变换,必须使用齐次坐标。就是说值1要被放到点向量中x,y和z分量的后面,变换完成后此分量值还应该保持为1.如果回想一下我们已经讨论过的变换操作,就会明白我们始终都在使用齐次坐标。如果此分量值从1变成了其他的值,此矢量就需要进行重整化处理(归一化)。重整化处理(归一化)就是将点向量的每一分量乘以一个相同的数值使得其最后的一个分量的值再次等于1。透视矩阵为:
            |1  0   0    0           |
            |0  1   0    0           |
M_P= |0   0   0   1/focus |
           |0   0  -1    0           |
    此矩阵乘以一个点向量,我们就得到:
           |x|
           |y|
     P= |z|
          |1|
                      |x            |
                      |y            |
        M_P.P= |-1          |
                      |z/focus |
    正如你所看到的结果,结果点向量的最后一个分量不等于1。这就需要对此向量进行重整化处理(归一化),将其每一分量乘以其最后一个分量的倒数focus/z。
有件重要的事需要注意,就是无论什么时候如果z等于0,不要犯将其作为除数的错误。为了防止此类错误的发生,可以将可能引起此类错误的点从要进行透视投影的点的集合中“裁剪”掉,就是我们下面要讨论的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值