Ras*_*sen 4 opengl transformation z-axis
为了加深对 OpenGL 和 3D 的理解,我尝试实现一个仅在 CPU 上运行的简单渲染管道。在有意义的地方,我尝试使用与 OpenGL 相同的标准。例如,我使用右手坐标系,如 OpenGL。正如学习新东西时经常发生的那样,我现在遇到了一个无法找到答案的问题。如果以下内容有什么不明白的地方,请原谅并纠正我。
在剪辑空间(您在顶点着色器中指定的坐标gl_Position)中,负 Z 远离用户。但在深度缓冲区中,正 Z 值消失了(如果您使用默认深度设置)。
这个问题的一个答案表明翻转是由于投影变换造成的。但我做了一个小实验(基于 WebGL/OpenGL ES),结果表明相反的情况:在剪辑空间中,即使您不使用投影变换,Z 也指向远离用户的方向。
因此,在某个时刻,在您将 交给它之后gl_Position,OpenGL 会翻转 Z 坐标。这是什么时候、怎样的呢?
我的猜测是它在视口转换中,但我无法找到支持这一点的文档。
OpenGL 中的剪辑空间已经是左手的(而且一直都是)。因此,在现代 GL 中,没有明确使用右手系统的空间,并且根本没有进行“翻转”。然而,旧 GL 中的眼睛空间通常被定义为右旋,并且“翻转”是作为投影矩阵的一部分完成的,glFrustum()并且gluPerpective()明确期望近和远的正值引用各自的负 z 值。然而,由于您可以使用任意矩阵,因此您永远不会被迫用右手定义眼睛或物体空间,这只是类似于默认约定的东西。仍然有很多人在可编程管道方面遵循这一惯例。
| 归档时间: |
|
| 查看次数: |
3908 次 |
| 最近记录: |