gpt4 book ai didi

opengl - OpenGL 中的投影矩阵真的是 "projection matrix"吗?

转载 作者:行者123 更新时间:2023-12-03 21:40:59 32 4
gpt4 key购买 nike

投影矩阵将向量从高维空间投影到子空间。我本来希望 OpenGL 中的投影矩阵将 R3 中的一个点投影到二维平面上。这似乎得到了互联网上很多文献的支持。许多站点暗示投影矩阵将 3D 世界投影到平面上,这就是绘制的内容。然而,我觉得这些解释中的大多数都跳过了几个步骤。其中许多似乎相互矛盾,所以我想澄清一下我从自己的分析中得出的结论。

有人可以确认(或纠正错误):

  • OpenGL 中的投影变换实际上并不是一个投影矩阵,而是将一个点变换到裁剪空间(它仍然是 R3 域的一部分),而实际投影到 2D 平面上的过程稍后会作为管道的固定函数发生。
  • 投影矩阵不应用透视划分;然而,它确实需要设置 w 坐标,以便在稍后发生透视分割时(作为管道的固定功能)点正确放置在 NDC 的内部或外部。
  • 裁剪空间是 x,y 轴上 (-1,+1) 和 z 轴上 (n,f) 之间的框,而 NDC 是所有轴上 (-1,+1) 之间的框。

  • 我分析了以下投影矩阵,得出上述结论:
    [ 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 ]

    根据该分析,我得出结论,截锥体内的任何点都将位于沿 x,y 轴的剪辑边界内;它可能在沿 z 轴的边界之外,但是一旦发生透视分割(w 现在是旧的 -z),该点将完全在剪辑空间内。

    由此我还得出结论,对于在 MVP 变换之后可见的点,它的 x、y 和 z/w 坐标必须在 +/-1 之间,并且透视分割和实际投影发生在顶点着色器之后。

    如果适用的答案仅适用于现代 OpenGL(3.3 核心或更高版本)。

    最佳答案

  • OpenGL 中的投影矩阵将点转换为裁剪空间。但这已经是一个预测。矩阵乘法之后唯一要做的就是透视除法。
  • 剪辑空间是每个轴上从 [-w 到 w] 的空间,因为剪辑空间和 NDC 之间发生的唯一操作是透视分割。 NDC 在每个轴上从 [-1 到 1]。

  • 补充说明:
  • 在数学上,OpenGL 投影矩阵将一个 4D 空间(P^4)映射到另一个 4D 空间(剪辑空间)。这可以通过矩阵的形式很容易看出(4x4 矩阵映射 4D -> 4D)。通过透视划分,4D 剪辑空间通过同质化被截断为 3D NDC (R^3) 空间。
  • 一个点在投影后可见,当它的 x,y,z 坐标在 [-w, w] 之间时。裁剪发生在透视分割之前的原因是,NDC 不一定是立方空间(它在 OpenGL 中是一个,但在 DirectX 中,例如,NDC 在 [-1,1] 中是 x,y,在 [0, 1])
  • 几何投影通常定义为从一个空间 (O) 到另一个空间 (T) 的映射 p。这将被写为
    O --p--> T
    在某些情况下,这种映射可以通过欧几里德空间中的变换矩阵来描述(例如,平行投影会起作用),但在很多情况下这是不可能的(尤其是在 O 中的平行线不平行的情况下)不再在 T 中)。这就是为什么需要投影空间的原因。

  • 我现在最好停在这里,因为从数学的角度来看它变得越来越复杂,但如果你想深入研究这个话题,我建议阅读以下文章:

    Wikipedia Projective Space
    Wikipedia Projective Geometry
    Video about projection in general (this, and the next one)

    关于opengl - OpenGL 中的投影矩阵真的是 "projection matrix"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31902574/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com