现在你可以再次调用这些公式,除非你要考虑到投影;所以,把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。因此最后用于透视投影的等式如下:
现在,当你把这个等式写成矩阵的形式,得到: