Chapter 7 Viewing

Chapter 7 Viewing

7.1 Viewing Transformations

大多数图形系统都包含以下三个转换序列

  • Camera Transformation, Eye Transformation
  • Projection Transformation
  • Viewport Trasnformation, Window Transformation

The Viewport Transformation

假定当前的几何物体位于标准视体内,标准视体是一个三维盒体,坐标都满足 ( x , y , z ) ∈ [ − 1 , − 1 ] 3 (x,y,z)\in[-1, -1]^3 (x,y,z)[1,1]3,如图

在这里插入图片描述

在图像边缘的像素都有距离像素中心半个像素的偏离,如果要在 n x ∗ n y n_x*n_y nxny大小的屏幕上画出图像,所以需要将 [ − 1 , 1 ] [-1, 1] [1,1]映射到 [ − 0.5 , n x − 0.5 ] ∗ [ − 0.5 , n y − 0.5 ] [-0.5, n_x-0.5]*[-0.5, n_y-0.5] [0.5,nx0.5][0.5,ny0.5]的范围内。

如果希望通过正交摄像机从-z方向进行观察,那么可以使用以下转换进行处理

[ x s c r e e n y s c r e e n 1 ] = [ n x 2 0 n x − 1 2 0 n y 2 n y − 1 2 0 0 1 ] [ x c a n o n i c a l y c a n o n i c a l 1 ] \begin{bmatrix} x_{screen} \\ y_{screen} \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{n_x}{2} & 0 & \frac{n_x - 1}{2} \\ 0 & \frac{n_y}{2} & \frac{n_y - 1}{2} \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x_{canonical} \\ y_{canonical} \\ 1 \end{bmatrix} xscreenyscreen1=2nx0002ny02nx12ny11xcanonicalycanonical1

目前z轴值没有发挥作用,目前就只做保留

M v p = [ n x 2 0 0 n x − 1 2 0 n y 2 0 n y − 1 2 0 0 1 0 0 0 0 1 ] M_{vp} = \begin{bmatrix} \frac{n_x}{2} & 0 & 0 & \frac{n_x - 1}{2} \\ 0 & \frac{n_y}{2} & 0 & \frac{n_y - 1}{2} \\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} Mvp=2nx00002ny0000102nx12ny101

7.1.2 The Orthographic Projection Transformation

正交投影中,观察方向是-z,正上方向为+y,视体是一个沿z轴的一个长方体,它的范围是 [ l , r ] ∗ [ b , t ] ∗ [ f , n ] [l,r]*[b,t]*[f,n] [l,r][b,t][f,n],这个长方体称为正交视体。

在这里插入图片描述

从正交视体转换到标准视体的矩阵为

M o r t h = [ 2 r − l 0 0 − r + l r − l 0 2 t − b 0 − t + b t − b 0 0 2 n − f − n + f n − f 0 0 0 1 ] M_{orth} = \begin{bmatrix} \frac{2}{r-l} & 0 & 0 & -\frac{r+l}{r-l} \\ 0 & \frac{2}{t-b} & 0 & -\frac{t+b}{t-b} \\ 0 & 0 & \frac{2}{n-f} & -\frac{n+f}{n-f} \\ 0 & 0 & 0 & 1 \end{bmatrix} Morth=rl20000tb20000nf20rlr+ltbt+bnfn+f1

7.1.3 The Camera Transformation

在这里插入图片描述

将物体从世界坐标转换到正交摄像机观察坐标的转换矩阵

M c a m = [ u ⃗ v ⃗ w ⃗ e ⃗ 0 0 0 1 ] M_{cam} = \begin{bmatrix} \vec{u} & \vec{v} & \vec{w} & \vec{e} \\ 0 & 0 & 0 & 1 \end{bmatrix} Mcam=[u 0v 0w 0e 1]

7.2 Projection Transformations

透视的关键属性是屏幕上物体的大小与观察位置与物体在-z轴方向长度的倒数成比例

在这里插入图片描述

表达成为

y s = d z y y_s=\frac{d}{z}y ys=zdy

由于该类型的转换会有一个输入的向量位于分母上,所以不能直接使用仿射变换,可以使用对齐次坐标的在仿射变换中的机制的简单概括来处理除法。

我们使用齐次向量 [ x   y   z   1 ] T [x\ y\ z\ 1]^T [x y z 1]T来表示点 ( x , y , z ) (x,y,z) (x,y,z),额外的坐标值 w w w总为1,这是因为仿射变换的第四行为 [ 0   0   0   1 ] T [0\ 0\ 0\ 1]^T [0 0 0 1]T,与其认为它是进行转换乘法带来的额外值,我们可以认为它是 x , y , z x,y,z x,y,z坐标的分母,因此 [ x   y   z   w ] T [x\ y\ z\ w]^T [x y z w]T实际表示点 ( x / w , y / w , z / w ) (x/w,y/w,z/w) (x/w,y/w,z/w),当 w = 1 w=1 w=1时,它可以被忽略,但当 w w w不为1时它提供了一个更广泛的转换范围。

具体的来说,线性变换可以表示为

x ′ = a x + b y + c z x' = ax + by + cz x=ax+by+cz

仿射变换将其扩展为

x ′ = a x + b y + c z + d x' = ax + by + cz + d x=ax+by+cz+d

w w w看做分母可以进一步增加变换的可能性

x ′ = a x + b y + c z + d e x + f y + g z + h x' = \frac{ax + by + cz + d}{ex + fy + gz + h} x=ex+fy+gz+hax+by+cz+d

可以被称为 x , y , z x,y,z x,y,z的线性有理函数(linear rational function),但是它的限制是三个维度的分母是相同的

x ′ = a 1 x + b 1 y + c 1 z + d 1 e x + f y + g z + h y ′ = a 2 x + b 2 y + c 2 z + d 2 e x + f y + g z + h z ′ = a 3 x + b 3 y + c 3 z + d 3 e x + f y + g z + h x' = \frac{a_1x + b_1y + c_1z + d_1}{ex + fy + gz + h} \\ y' = \frac{a_2x + b_2y + c_2z + d_2}{ex + fy + gz + h} \\ z' = \frac{a_3x + b_3y + c_3z + d_3}{ex + fy + gz + h} x=ex+fy+gz+ha1x+b1y+c1z+d1y=ex+fy+gz+ha2x+b2y+c2z+d2z=ex+fy+gz+ha3x+b3y+c3z+d3

表示为矩阵形式

[ x ^ y ^ z ^ w ^ ] = [ a 1 b 1 c 1 d 1 a 2 b 2 c 2 d 2 a 3 b 3 c 3 d 3 e f g g ] [ x y z 1 ] \begin{bmatrix} \hat{x} \\ \hat{y} \\ \hat{z} \\ \hat{w} \end{bmatrix}=\begin{bmatrix} a_1 & b_1 & c_1 & d_1 \\ a_2 & b_2 & c_2 & d_2 \\ a_3 & b_3 & c_3 & d_3 \\ e & f & g & g \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x^y^z^w^=a1a2a3eb1b2b3fc1c2c3gd1d2d3gxyz1

( x ′ , y ′ , z ′ ) = ( x ^ / w ^ , y ^ / w ^ , z ^ / w ^ ) (x', y', z') = (\hat{x}/\hat{w},\hat{y}/\hat{w},\hat{z}/\hat{w}) (x,y,z)=(x^/w^,y^/w^,z^/w^)

这种转换也被称为投影变换(projective transformation)或者homography

任何标量与矩阵相乘得到的结果都是等价的。

对于齐次向量进行多次变换是没有问题的,不需要考虑 w w w的值,即使在某些中间阶段 w w w的值会为0,只有当我们需要获得笛卡尔坐标时才需要作除以 w w w的操作。

7.3 Persepctive Projection

投影变换使视线投影时除以 z z z值的过程变得容易。图(7-4)中的变换可以表示为

[ y s 1 ]   [ d 0 0 0 1 0 ] [ y z 1 ] \begin{bmatrix} y_s \\ 1 \end{bmatrix}~\begin{bmatrix} d & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}\begin{bmatrix} y \\ z \\ 1 \end{bmatrix} [ys1] [d00100]yz1

它将2D齐次向量 [ y ; z ; 1 ] T [y;z;1]^T [y;z;1]T转换成1D齐次向量 [ d y   z ] T [dy\ z]^T [dy z]T,他表示1D点 ( d y / z ) (dy/z) (dy/z)

在3D透视投影矩阵中,由于按照惯例摄像机的朝向为 − z -z z方向,所以距离是 − z -z z,结合视锥的远近截面的概念,近截面会作为投影面,所以图像的距离为 − n -n n

所以有 y s = ( n / z ) y y_s=(n/z)y ys=(n/z)y x x x轴向也是一样,这个变换可以表示为透视矩阵

P = [ n 0 0 0 0 n 0 0 0 0 n + f − f n 0 0 1 0 ] P = \begin{bmatrix} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -fn \\ 0 & 0 & 1 & 0 \end{bmatrix} P=n0000n0000n+f100fn0

这个矩阵可以起到透视的效果,位于近平面上的点不变,位于远平面上的点挤压x与y的值

P [ x y z 1 ] = [ n x n y ( n + f ) z − f n z ] ∼ [ n x z n y z n + f − f n z 1 ] P\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}=\begin{bmatrix} nx \\ ny \\ (n+f)z-fn \\ z \end{bmatrix} \sim \begin{bmatrix} \frac{nx}{z} \\ \frac{ny}{z} \\ n + f - \frac{fn}{z} \\ 1 \end{bmatrix} Pxyz1=nxny(n+f)zfnzznxznyn+fzfn1

该转换除了对 x x x y y y进行了投影缩放之外,还将 z z z值限定在了远近截面之间,可以作为深度值使用。该变换的逆操作为

P − 1 = [ 1 n 0 0 0 0 1 n 0 0 0 0 0 1 0 0 − 1 f n n + f f n ] P^{-1}=\begin{bmatrix} \frac{1}{n} & 0 & 0 & 0 \\ 0 & \frac{1}{n} & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & -\frac{1}{fn} & \frac{n+f}{fn} \\ \end{bmatrix} P1=n10000n100000fn1001fnn+f

对于齐次想来来说乘以某个标量不会改变其意义,所以可以进一步化简为

P − 1 = [ f 0 0 0 0 f 0 0 0 0 0 f n 0 0 − 1 n + f ] P^{-1}=\begin{bmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 0 & fn \\ 0 & 0 & -1 & n+f \\ \end{bmatrix} P1=f0000f00000100fnn+f

结合 P P P M o r t h M_{orth} Morth可以生成投影矩阵

M p e r = M o r t h P = [ 2 n r − l 0 l + r l − r 0 0 2 n t − b b + t b − t 0 0 0 f + n n − f 2 f n f − n 0 0 1 0 ] M_{per}=M_{orth}P=\\ \begin{bmatrix} \frac{2n}{r-l} & 0 & \frac{l+r}{l-r} & 0 \\ 0 & \frac{2n}{t-b} & \frac{b+t}{b-t} & 0 \\ 0 & 0 & \frac{f+n}{n-f} & \frac{2fn}{f-n} \\ 0 & 0 & 1 & 0 \end{bmatrix} Mper=MorthP=rl2n0000tb2n00lrl+rbtb+tnff+n100fn2fn0

7.4 Some Properties of the Perspective Transform

投影变换的最重要的性质是它将线转化为线、平面转化为面。

7.5 Field-of-View

在这里插入图片描述

从图中可以看出

t a n θ 2 = t ∣ n ∣ tan\frac{\theta}{2} = \frac{t}{|n|} tan2θ=nt

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值