为了提高我对 OpenGL 和 3D 的理解,我正在尝试实现一个仅在 CPU 上运行的简单渲染管道。在有意义的地方,我正在尝试使用与 OpenGL 相同的标准。例如,我正在使用像 OpenGL 这样的右手坐标系。正如在学习新事物时经常发生的那样,我现在遇到了一个我找不到答案的问题。如果以下内容有不妥之处,请见谅并指正。
在剪辑空间(您gl_Position
在顶点着色器中指定的坐标)中,负 Z 远离用户。但在深度缓冲区中,正 Z 不存在(如果您使用默认深度设置)。
这个问题的一个答案表明翻转是由于投影变换。但我做了一个小实验(基于 WebGL/OpenGL ES),结果恰恰相反:在剪辑空间中,Z 指向远离用户,即使您不使用投影变换。
所以在某些时候,在你将gl_Position
OpenGL 交给它之后,它会翻转 Z 坐标。那是什么时候,怎么样?
我的猜测是它在视口转换中,但我无法找到支持这一点的文档。