首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openGL相机空间与NDC观看方向的比较

openGL相机空间与NDC观看方向的比较
EN

Stack Overflow用户
提问于 2014-06-21 22:06:34
回答 1查看 1K关注 0票数 2

我试图理解开放GL的概念。在阅读本教程-- http://www.arcsynthesis.org/gltut/Positioning/Tut04%20Perspective%20Projection.html时,我理解了这样的说法:

这是因为相机空间和NDC空间有不同的观看方向。在相机空间中,相机向下看-Z轴;更多的负Z值离得更远。在NDC空间中,相机向下看+Z轴,更多的正Z值更远。该图翻转轴,以便两幅图像之间的观看方向保持不变(向上远离)。

我不明白为什么观看方向要改变。有谁能用一个例子来帮助我理解这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 22:27:43

这基本上只是个会议。OpenGL剪辑空间(以及NDC空间和屏幕空间)一直被规范定义为左撇子(z指向屏幕)。

OpenGL眼空间被定义为原点的相机和-z的方向(所以是右手)。然而,这一约定在固定功能管道中才是有意义的,在这种情况下,再加上在眼睛空间中执行的每个顶点照明的固定功能,观看方向确实很重要,比如何时禁用GL_LOCAL_VIEWER(默认情况下)。

典型的GL投影矩阵通常转换惯性值,透视除法通常使用-z_eye的除法器完成,因此投影矩阵的最后一行通常是(0,0,-1,0)。旧的glFrustum()glOrtho()gluPerspective()实际上支持该约定,方法是使用否定的z_nearz_far裁剪距离,因此您必须为剪贴机平面在z<0的摄像机前指定正值。

然而,对于现代GL来说,这一约定或多或少是毫无意义的。没有固定的功能单元在眼睛空间中工作,所以眼睛空间(以及之前的任何东西)完全在用户的控制之下。你可以用你喜欢的任何东西。剪辑空间和后面的所有空间仍然被固定的函数单元(裁剪、栅格化、.)所使用,因此大多数情况下都有一些惯例来定义接口,而它仍然是一个左手系统。

即使在现代GL,旧的右眼空间惯例仍在使用中。例如,流行的glm库以同样的方式重新实现了旧的GL矩阵函数。

确实没有理由选择一个可能的约定而不是另一个,但在某个时候,你必须选择并坚持其中一个。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24346274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档