gpt4 book ai didi

matrix - 透视投影矩阵的最后一行

转载 作者:行者123 更新时间:2023-12-05 03:12:20 25 4
gpt4 key购买 nike

您能向我解释一下 gl_projection 矩阵最后一行中 -1 的目的是什么吗?它如何影响透视分割步骤?

enter image description here

最佳答案

透视投影的基本属性是将 x/y 坐标除以深度(与观察者的距离)。这使得靠近观察者的物体(具有较小的深度值)更大,而远离观察者的物体(具有较大的深度值)较小。

下一个难题是齐次坐标的工作原理。顶点着色器生成的齐次空间中的 (x, y, z, w) 坐标通过除以 w 转换为常规 3D 坐标:

(x, y, z, w) --> (x/w, y/w, z/w, 1)

所以我们要除以深度来实现透视,我们知道顶点着色器产生的坐标会除以w。为了得到想要的结果,我们可以简单地将眼睛坐标空间中的深度值放入w坐标中。

这正是投影矩阵最后一行所做的。最后一行与输入向量(即顶点的眼空间坐标)的点积产生输出的 w 值:

(0 0 -1 0) * (x y z 1) = -z

您可能期望矩阵元素的值为 1,以便简单地将眼睛空间中的 z 值复制到顶点着色器输出的 w 值。我们使用 -1 来反转符号的原因是基于 OpenGL 中眼睛空间坐标的常见排列方式。

OpenGL 中的眼睛坐标通常以“相机”为原点,向下看 z 轴。所以 z 坐标的可见范围具有负值。由于我们想要在生成的 w 坐标中与观察者的距离,我们翻转眼睛空间 z 坐标的符号,这将负 z 值转换为距原点的正距离值。

请注意,其中大部分只是通用策略,部分 Root 于遗留的固定功能管道。借助当前 OpenGL 版本中使用的可编程管道,您可以完全自由地组织坐标空间和变换。例如,您可以轻松地使用相机指向正 z 方向的眼空间坐标系,然后在投影矩阵的最后一行使用 1 而不是 -1。

关于matrix - 透视投影矩阵的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973605/

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