可能会有所帮助,画一个图。忽略x坐标可以使一切变得更简单,这样就将所有内容放在二维平面上。在这个更简单的图中,要找到点t在平面PP上的投影,只需从针孔位置到该点画一条线即可。这使得从图中非常容易计算出每个点应该投影到哪里。您可以使用此方法检查矩阵计算结果。
如果我们在原点处有一个针孔,而平面距离为3Zp,则矩阵为一半的答案。
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1/3Zp 0 )
只有当针孔位于原点时,此方法才有效。在a)部分中,它并不是。
你需要进行平移操作。在a)情况下,将所有内容平移,使COP2位于原点,应用投影,然后应用平移的逆运算。如果我们向M添加第四行,事情会变得更容易。
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1 0 )
( 0 0 1/3Zp 0 ) Note modified form.
沿着z轴进行距离d的翻译如下:
( 1 0 0 0 )
T = ( 0 1 0 0 )
( 0 0 1 d )
( 0 0 0 1 )
逆操作将会简单地执行
( 1 0 0 0 )
T'= ( 0 1 0 0 )
( 0 0 1 -d )
( 0 0 0 1 )
要获得最终的投影矩阵,请找到:
T' M T.
最后,我们通过舍弃第三个坐标从4D(x,y,z,w)变为3D(x,y,w)。您可以通过乘以一个3X4矩阵来实现这一点。
请注意,正确的透视投影形式,请参见
变换矩阵部分透视投影。
为了使事情更加明确,假设a=Zp。翻译完成。
( 1 0 0 0 )
T = ( 0 1 0 0 )
( 0 0 1 -2 a )
( 0 0 0 1 )
在原点投影到平面3Zp上的结果是:
( 1 0 0 0 )
M = ( 0 1 0 0 )
( 0 0 1 0 )
( 0 0 -1/(3a) 0 )
找到将T'旋转的矩阵M,结果为:
( 1 0 0 0 )
N = ( 0 1 0 0 )
( 0 0 1/3 -2/3 a )
( 0 0 -1/(3a) 2/3 )
我们申请我们的两点。
( 0 ) ( 0 ) ( 0 )
N ( Yp ) = ( Yp ) -> ( Yp )
( -a ) ( -a ) ( -a )
( 1 ) ( 1 )
( 0 ) ( 0 ) ( 0 )
N ( Yp ) = ( Yp ) -> ( 3/4 Yp )
( -2a ) ( -4/3 a ) ( -a )
( 1 ) ( 4/3 )
最后一步是除以w,这样我们就得到了落在平面z = -a = -Zp上的(x,y,z)坐标。这与我们从图中得到的相符。如果您想,可以删除N的第三行。