Z轴何时翻转? (OpenGL的)

时间:2013-07-15 08:52:03

标签: opengl transformation z-axis

为了提高我对OpenGL和3D的理解,我试图实现一个只在CPU上运行的简单渲染管道。在有意义的地方,我试图使用与OpenGL相同的标准。例如,我正在使用右手坐标系like OpenGL。正如在学习新事物时经常发生的那样,我现在遇到一个我无法找到答案的问题。如果以下内容没有意义,请原谅并纠正我。

在剪辑空间(您在顶点着色器中为gl_Position提供的坐标)中,负Z远离用户。但是在深度缓冲区中,正Z离开(如果您使用的是默认深度设置)。

this question的一个答案表明翻转是由投影变换引起的。但是我做了a little experiment(基于WebGL / OpenGL ES),反过来说:在剪辑空间中,即使你不使用投影变换,Z也指向远离用户。

所以在某些时候,在你递给你gl_Position之后,OpenGL会翻转Z坐标。何时以及如何?

我的猜测是它位于viewport transform,但我找不到支持此文档的文档。

2 个答案:

答案 0 :(得分:3)

OpenGL中的剪辑空间已经左手(并且一直是)。因此,在现代GL中,没有明确使用右手系统的空间,并且根本没有“翻转”。然而,旧GL中的眼睛空间通常是右手定义的,并且“翻转”是作为投影矩阵的一部分完成的,glFrustum()gluPerpective()明确地期望近和远的正值可以参考对于重复的负z值。但是,由于您可以使用任意矩阵,您从未被迫用右手定义您的眼睛或对象空间,它只是默认约定。仍有很多人使用可编程管道遵循此约定。

答案 1 :(得分:0)

根据 WebGL初学者指南,在投影变换后的透视分割期间,z轴被反转。

以下是它的说法:

  

透视划分将视锥体转换为立方体   以最小坐标[-1,-1,-1]和最大值为中心的原点   坐标[1,1,1]。此外,z轴的方向反转,如   如下图所示:

enter image description here