在透视投影中物体z分量大小的变化

概念:

透视投影是用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。它具有消失感、距离感、相同大小的形体呈现出有规律的变化等一系列的透视特性,能逼真地反映形体的空间形象。
透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。

投影变换

透视投影的过程,如图,通过将左图变换为右图,再通过正交投影投射到摄像机上去。
在这里插入图片描述

问题?

已知条件:
在这里插入图片描述
n n n 表示距离摄像机最近的一个平面的距离
f f f 表示距离摄像机最远的一个平面的距离
摄像机的位置在原点,且朝向为 − z -z z 方向,因此该物体中 z z z 轴上的定义域为 [ f , n ] [f, n] [f,n]

该物体中某个点的位置,用齐次坐标表示为:
( x y z 1 ) \begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix} xyz1

由上图可得:
y ′ = n z y , x ′ = n z x y' = \frac{n}{z}y, x' = \frac{n}{z}x y=zny,x=znx
这里 z z z 轴上的点还无法确定,只是知道在近平面上的点都不会发生变换,远平面上的点 z z z 轴不变
因此可以先提取一部分变换矩阵:
( n 0 0 0 0 n 0 0 0 0 ? ? 0 0 1 0 ) ( x y z 1 ) = ( x ′ y ′ ? 1 ) = ( n x n y ? z ) ⇒ ( n x z n y z ? 1 ) \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & ? & ? \\ 0 & 0 & 1 &0 \end{pmatrix} \begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix}= \begin{pmatrix} x'\\ y'\\ ?\\ 1 \end{pmatrix}= \begin{pmatrix} nx\\ ny\\ ?\\ z \end{pmatrix}\Rightarrow \begin{pmatrix} \frac{nx}{z}\\ \frac{ny}{z}\\ ?\\ 1 \end{pmatrix} n0000n0000?100?0 xyz1 = xy?1 = nxny?z znxzny?1

现在根据特殊值来解这个矩阵,根据在近平面和远平面的条件我们可以得到关于 ? ? ? 那一行的方程组:
s e t : ( n 0 0 0 0 n 0 0 0 0 A B 0 0 1 0 ) set: \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & A &B \\ 0 & 0 & 1 &0 \end{pmatrix} set: n0000n0000A100B0
近平面: z = n z=n z=n
( n 0 0 0 0 n 0 0 0 0 A B 0 0 1 0 ) ( x y n 1 ) = ( n x n y ? = n 2 n ) ⇒ ( n x n = x n y n = y n 2 n = n n n = 1 ) \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & A & B \\ 0 & 0 & 1 &0 \end{pmatrix} \begin{pmatrix} x\\ y\\ n\\ 1 \end{pmatrix}= \begin{pmatrix} nx\\ ny\\ ?=n^2\\ n \end{pmatrix}\Rightarrow \begin{pmatrix} \frac{nx}{n} = x\\ \frac{ny}{n} = y\\ \frac{n^2}{n} = n\\ \frac{n}{n} = 1 \end{pmatrix} n0000n0000A100B0 xyn1 = nxny?=n2n nnx=xnny=ynn2=nnn=1

A n + B = n 2 An+B=n^2 An+B=n2
远平面: z = f z=f z=f

( n 0 0 0 0 n 0 0 0 0 A B 0 0 1 0 ) ( x y f 1 ) = ( f x f y ? = f 2 f ) ⇒ ( f x f = x f y f = y f 2 f = n f f = 1 ) \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & A & B \\ 0 & 0 & 1 &0 \end{pmatrix} \begin{pmatrix} x\\ y\\ f\\ 1 \end{pmatrix}= \begin{pmatrix} fx\\ fy\\ ?=f^2\\ f \end{pmatrix}\Rightarrow \begin{pmatrix} \frac{fx}{f} = x\\ \frac{fy}{f} = y\\ \frac{f^2}{f} = n\\ \frac{f}{f} = 1 \end{pmatrix} n0000n0000A100B0 xyf1 = fxfy?=f2f ffx=xffy=yff2=nff=1

A f + B = f 2 Af+B=f^2 Af+B=f2
方程组:
{ A n + B = n 2 A f + B = f 2 \begin{cases} An+B =n^2 \\ Af+B =f^2 \end{cases} {An+B=n2Af+B=f2
解得:
{ A = n + f B = − n f \begin{cases} A =n+f \\ B =-nf \end{cases} {A=n+fB=nf

故现在可得变换矩阵为:
( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ) \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & n+f &-nf \\ 0 & 0 & 1 &0 \end{pmatrix} n0000n0000n+f100nf0

z 分量会在这个变换过程中有什么变化?

那么根据games101-闫令琪老师提出的一个思考问题,物体坐标中的 z z z 分量会在这个变换过程中有什么变化?

前面的都是铺垫,后面才是解决这个问题的正文。

首先可以设一个坐标点:
( x y z 1 ) \begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix} xyz1
将变换矩阵与其相乘得到变换后的坐标:
( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 1 0 ) ( x y z 1 ) = ( n x z = x ′ n y z = y ′ ( n + f ) z − n f z = z ′ z z = 1 ) \begin{pmatrix} n & 0 & 0 &0 \\ 0 & n & 0 &0 \\ 0 & 0 & n+f &-nf \\ 0 & 0 & 1 &0 \end{pmatrix} \begin{pmatrix} x\\ y\\ z\\ 1 \end{pmatrix}= \begin{pmatrix} \frac{nx}{z} = x'\\ \frac{ny}{z} = y'\\ \frac{(n+f)z-nf}{z} = z'\\ \frac{z}{z} = 1 \end{pmatrix} n0000n0000n+f100nf0 xyz1 = znx=xzny=yz(n+f)znf=zzz=1
此时可以设方程:
f ( z ) = z ′ − z = ( n + f ) − n f z − z , z ∈ [ f , n ] f(z) = z'-z=(n+f)-\frac{nf}{z}-z, z\in[f,n] f(z)=zz=(n+f)znfz,z[f,n]
对其求导:
f ′ ( z ) = n f z 2 − 1 , z ∈ [ f , n ] f'(z) = \frac{nf}{z^2}-1, z\in[f,n] f(z)=z2nf1,z[f,n]
输入: z = n , z = f z=n ,z=f z=n,z=f

注意,这里需要明确 n < 0 , f < 0 n < 0,f < 0 n<0,f<0,之前确实忽略了这一点,由评论中 little little bin
指出👉
{ f ′ ( n ) = f n − 1 > 0 f ′ ( f ) = n f − 1 < 0 \begin{cases} f'(n) =\frac{f}{n}-1 > 0 \\ f'(f) =\frac{n}{f}-1 < 0 \end{cases} {f(n)=nf1>0f(f)=fn1<0
那么可以在坐标轴上表示其关系:
在这里插入图片描述

结论

由图可知,在 [ f , n ] [f,n] [f,n]上都有
f ( z ) = z ′ − z < 0 f(z)=z'-z<0 f(z)=zz<0
因此物体中的某个位置在变换过程中 z z z 分量会变小,但是从绝对值来说是增大。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值