2012-02-21 119 views
5

起初,我想知道为什么NDC的范围从-1到1,而不是从0到1.我想可能是中心的原点对某些东西有用。为什么标准化设备坐标系统是左手的?

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

难道这只是为了让远处的物体的Z值更高吗?这对我来说是一个足够好的理由。

+0

我不明白中心原点是如何意味着它是“左手”... – 2012-02-21 20:44:21

+0

我从来没有暗示过这一点。看到这里:http://www.songho.ca/opengl/gl_projectionmatrix.html改写我的问题。 – 2012-02-21 20:46:30

+1

为什么右撇子系统会更好? – cmannett85 2012-02-21 20:48:02

回答

11

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

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

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

其原因并不重要;惯用手纯粹是符号方便。在一些地方,右撇子是有道理的。在其他情况下,左撇子是有道理的。而且由于它被轻微改变,只要使用适合你的东西。

然后它会和其他所有东西一致。

符合什么什么?所有被删除的固定功能的东西?

视口转换全部由OpenGL在内部完成,没有人可以在这里完成。你甚至不提供矩阵;您只需提供一个视口和深度范围。所以从使用固定功能GL的人来看,一切都是右倾的。

只有在直接处理顶点着色器时,你必须知道剪辑空间的指向性是什么。在这种情况下,旋向的变化是透视投影的一个简单函数,否定Z.或者,如果您喜欢左手坐标,则透视投影而不是否定Z.或者,再次,仅颠倒glDepthRange,现在你是右撇子。

7

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

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

难道只有这样才能使Z值远离更远的物体?这对我来说是一个足够好的理由。

那么,这正是它的原因。

0

猜测handual的变化属于图形卡如何解释z值。更大的z值 - >更大的深度。隐含的改变手性可以通过投影矩阵来执行而不需要额外的成本。稍后更改它将增加一个额外的计算步骤。