为什么标准化设备坐标系左撇子?

Ste*_* Lu 6 opengl

起初我想知道为什么NDC范围从-1到1,而不是从0到1.我想可能在中心的原点对某些东西有用.

但为什么它使用左手坐标系?

是否可以使更远的物体的Z值更高?这对我来说是个充分的理由.

Nic*_*las 12

但为什么它使用左手坐标系?

让我们在这个问题上添加"默认".因为改变它所需要的只是glDepthRange(1.0f, 0.0f);现在你是右撇子.是的,这是完全合法的GL语法; 从来没有限制z附近的范围小于远z的范围.

为什么默认是左撇子?也许ARB上有人喜欢这样.也许ARB上的某个人喜欢增加深度范围而不是减少,左下角的方向也是必要的.也许是因为OpenGL的祖先,IRIX GL,这样做了,ARB没有看到任何改变它的需要.

其原因并不重要; 用手纯粹是一种符号方便.在某些地方,右撇子是有道理的.在其他人看来,左撇子是有道理的.而且由于它被轻易改变,只需使用适合您的方法.

然后它将与其他一切保持一致.

一致什么一切?所有已被删除的固定功能的东西?

视口转换完全由内部的OpenGL完成,没有人可以得到它.你甚至不提供矩阵; 你只需提供一个视口和深度范围.因此,从使用固定功能GL的人的角度来看,一切都是正确的.

只有在直接处理顶点着色器时才会出现左右手,这里你必须知道剪辑空间的手性.在这种情况下,手性的变化是透视投影否定Z的简单函数.或者,如果你喜欢左手坐标,透视投影不会否定Z.或者再次,只需反转glDepthRange现在你就是右手.


dat*_*olf 8

但为什么它使用左手坐标系?

因此,在视图方向上从投影平面增加的距离映射到增加深度缓冲器的值.

是否可以使更远的物体的Z值更高?这对我来说是个充分的理由.

嗯,这正是为什么会这样.