【问题标题】:Proper values for gluPerspective() or glFrustum()gluPerspective() 或 glFrustum() 的正确值
【发布时间】:2016-09-14 06:13:16
【问题描述】:

我一直在使用gluPerspective,并且对它的作用和工作原理有所了解。但我仍然不太明白如何使用它来实现超出它开始和停止的任何效果。更改zfarznear 似乎对任何事情都没有太大影响。我错过了很酷的效果吗?有哪些数值范围以及您可以做哪些视觉失真?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    你不会错过任何很酷的效果。 zNearzFar(或 nearValfarVal)是到近剪裁平面和远剪裁平面的距离。它们定义了相机空间 z 坐标映射到投影空间深度值的方式。 z 缓冲区可以存储介于 -1 和 +1 之间的值。远离相机的点zNear 将映射为-1,而远离相机的点zFar 将映射为+1。超出该范围的任何内容都将被剪裁。

    请注意,这两个功能以及我所说的一切都是遗留的。您最好使用 OpenGL 4+ 学习现代 OpenGL 管道。在那里,您负责明确地进行精确的数学运算,我认为这将提高您对它的工作原理的理解。同样,今天您实际上可以use floating point z-buffers 禁用深度裁剪,从而使所有近/远裁剪平面都过时了。

    【讨论】:

      【解决方案2】:

      OpenGL函数GLFrustum()中投影矩阵的几何意义,在OpenGL官方指南(本书第九版,OpenGL编程指南——学习OpenGL的官方指南)中有解释,来自一个代数的观点,实际上对应于许多与作者预期不同的几何含义。

      它们之间的显着区别是: 1.在官方指南中,作者说明了一个复合线性变换,其因子之一为central projection,因此最终的复合透视投影矩阵应该是奇异矩阵或退化矩阵; 2. 虽然还在官方指南中,但在附录中,GLFrustum() 透视投影矩阵是一个非奇异的 4 乘以 4 方阵!

      请注意:作者试图将非奇异矩阵解释为理论上的奇异矩阵!

      以下矩阵分解(不唯一)对应非单数GLFrustum()矩阵的几何意义之一:

      enter image description here

      除第(2)号之外的所有上述矩阵因子,在Unified Framework of Elementary Geometric Transformations 中重新定义了它们的几何意义。如果您选择此分解作为GLFrustum() 透视投影矩阵的几何含义解释,则必须确保您在代码中进行的任何计算或变换都与其几何含义一致。

      所以当你使用 OpenGL GLFrustum() 进行编程时,可能需要与官方指南中说明的内容进行比较,以及从纯代数射影几何的角度来看,GLFrustum() 透视投影矩阵的真正含义,以及使用您自己的任何一种。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多