擅长:python、mysql、java
<p>在计算机图形学中,投影矩阵只是定义了某个体积到一个定义的标准体积(通常是立方体)的仿射或投影变换。</p>
<p>我不知道玛雅在这里的约定,所以我用的是GL,原则在任何情况下都是一样的。</p>
<p>在GL中,观察体积由单位立方体[-1,1]表示,在<em>标准化设备空间</em>的所有3个维度上。而投影的矩阵工作是将数据转换成<em>剪辑空间</em>。剪辑空间与规范化设备空间的区别在于后者在透视分割之后。但是,因为你不需要透视,只需要一个正交矩阵,除数总是1,所以在这种情况下,我们可以将规范化设备空间和剪辑空间视为相同的。</p>
<p>现在用你的矩阵(从评论中得到的更精确的版本,你粘贴在问题中的那个实际上使你无法重建z)并将一个点与之相乘得到:</p>
<pre><code>(0.066666667 0.0 0.0 0.0 ) (x)
(0.0 0.131734838 0.0 0.0 ) (y)
(0.0 0.0 -0.000200002 -1.00002) (z)
(0.0 0.0 0.0 1.0 ) (1)
x' = 0.066666667 * x
y' = 0.131734838 * y
z' = -0.000200002 * z -1.00002
</code></pre>
<p>所以这个矩阵非常好,因为它可以简单地通过分别反演每个方程来求逆。您需要找出的是<code>x</code><code>y</code>和{<cd3>}在剪辑空间中显示体积的边缘,因此<code>x'=-1</code>,<code>x'=1</code>,<code>y'=-1</code>等等。</p>
<p>这将导致x的查看体积为[-15,15]、y为[-7.591,7.591](与您在评论中提到的1401/709的纵横比相匹配)和在z中的[-0.1,-5000]。在典型的GL术语中,该矩阵是由于:</p>
^{pr2}$
<p>(clip near和clip far的z值按惯例取反,因为相机应该沿着<code>-z</code>看,而clip值是距离)。</p>
<p>所有这些都在你给出的链接中得到了解释。我会在这里加上同样的链接,如果不是已经在问题中。。。</p>