【转】投影矩阵的推导 (5)

【转】投影矩阵的推导

现在你可以再次调用这些公式,除非你要考虑到投影;所以,把x用x * n/z代替,把y用y * n/z代替:

【转】投影矩阵的推导

现在,通过乘以z:

【转】投影矩阵的推导

这些结果有点奇怪。为了把这些等式写进矩阵,你需要把它们写成这种形式:

【转】投影矩阵的推导

但很明显,现在还做不到,所以现在看起来进入了僵局。应该做什么呢?如果你能找到个办法获得z\'z的公式就像x\'z和y\'z那样,你就可以写一个变换矩阵把(x, y, z)映射到(x\'z, y\'z, z\'z)。然后,你只需要把各部分除以点z,你就会得到你想要的(x\', y\', z\')。

因为你知道z到z\'的转换不依赖于x和y,你知道你想要一个公式形如z\'z= pz + q,p和q是常量。并且,你可以很容易的找到那些常量,因为你知道在两种特殊情况下如何得到z\': 因为你要把[n, f]映射到[0, 1],你知道当z=n时z\'=0,和z=f时z\'=1。当你把第一组值代入z\'z = pz + q,你可以解得:

【转】投影矩阵的推导

现在,把第二组值代入,得到:

【转】投影矩阵的推导

把q的值代入等式,你可以很容易的解得p:

【转】投影矩阵的推导

现在你有p的值了,并且刚刚你求得了q= –pn,所以你可以解得q:

【转】投影矩阵的推导

最后,把p和q的表达式代入最原始的公式中,得:

【转】投影矩阵的推导

你就快完成了,但是你处理这个问题的不寻常的性质需要你也处理齐次坐标w。通常情况下,只是简单的设置w\' = 1 ——你可能已经注意到在一个基本的变换下最后一行总是[0, 0, 0, 1]---但是现在你在为点(x\'z, y\'z, z\'z, w\'z)写一个变换。所以取而代之的,把w\' = 1写成w\'z = z。因此最后用于透视投影的等式如下:

【转】投影矩阵的推导

现在,当你把这个等式写成矩阵的形式,得到:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzffzw.html