我最近开始学习 OpenGL,就与 GL 和着色器的通信而言,我已经获得了很好的能力,但我对坐标系有点不清楚。
我使用的是 OpenGL ES 2.0,所以我必须自己做所有的矩阵管理。我开始明白以下几点:
为了观察正确的结果,将矩阵乘以模型 * 视图 * 投影(这非常有意义,因为矩阵乘法不可交换)。
模型矩阵表示绘图图元的缩放、旋转、平移等。在 3D 空间中移动图元涉及应用于该矩阵的变换。
视图矩阵代表许多人所指的“相机”。对象和观察者之间的距离以及眼睛围绕对象的旋转来自到这个矩阵的变换。
最后,透视矩阵表示场景存在的 3D 空间。我正在关注一些示例,这些示例主要使用使用视野和纵横比的透视方法。这就是我的困惑开始的地方。
图元的坐标以 +-[0, 1] 区间中的浮点数形式给出。但是透视矩阵表示从近 z 到远 z 的 3D 空间(我已经看到分别为 0 和 100)。我对图元的坐标如何映射到这个空间感到困惑。显然,在这种情况下,我的线性代数技能并没有我希望的那么强。谁能澄清这些点是如何映射到这个空间的?
例如,许多示例将立方体定义为 +-(.5, .5, .5)。II使用near-z = 0,far-z = 100的透视矩阵,以及整个显示器的纵横比,这是否意味着立方体总是在这些维度中的每一个的0.5?我的意思是,如果透视矩阵从 x=-5 变为 x=5,x 坐标最终是否为 .5(-5) = -2.5?