投影矩阵将向量从高维空间投影到子空间。我本来希望 OpenGL 中的投影矩阵将 R 3 中的一个点投影到二维平面上。这似乎得到了互联网上很多文献的支持。许多站点暗示投影矩阵将 3D 世界投影到平面上,这就是绘制的内容。然而,我觉得这些解释中的大多数都跳过了几个步骤。他们中的许多人似乎相互矛盾,所以我想澄清一下我从自己的分析中得出的结论。
有人可以确认(或纠正错误):
我分析了以下投影矩阵,得出上述结论:
[ 2n/(r-l) 0 (r+l)/(r-b) 0 ]
[ 0 2n/(t-b) (t+b)/(t-b) 0 ]
[ 0 0 -(f+n)/(f-n) -2fn/(f-n) ]
[ 0 0 -1 0 ]
Run Code Online (Sandbox Code Playgroud)
根据该分析,我得出结论,截锥体内的任何点都将位于沿 x,y 轴的剪辑边界内;它可能在沿 z 轴的边界之外,但是一旦发生透视分割(w 现在是旧的 -z),该点将完全在剪辑空间内。
由此我还得出结论,对于在 MVP 变换之后可见的点,它的 x、y 和 z/w 坐标必须在 +/-1 之间,并且透视分割和实际投影发生在顶点着色器之后。
如果适用的答案仅适用于现代 OpenGL(3.3 核心或更高版本)。
OpenGL 中的投影矩阵将点变换到裁剪空间。但这已经是一个预测了。矩阵乘法之后唯一要做的就是透视除法。
真的
剪辑空间是每个轴上从 [-w 到 w] 的空间,因为剪辑空间和 NDC 之间发生的唯一操作是透视划分。每个轴上的 NDC 范围为 [-1 到 1]。
补充笔记:
几何投影通常被定义为从一个空间 (O) 到另一个空间 (T) 的映射 p。这将写成
O --p--> T
在某些情况下,这样的映射可以通过欧几里得空间中的变换矩阵来描述(例如,平行投影就可以),但在很多情况下这是不可能的(特别是在 O 中的平行线不平行的情况下) T 中还有更多)。这就是需要射影空间的原因。
我现在最好停在这里,因为从数学的角度来看它变得越来越复杂,但如果您想深入研究这个主题,我建议您阅读以下文章:
维基百科射影空间
维基百科射影几何
关于一般投影的视频(这个和下一个)
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |