gluPerspective()或glFrustum()的正确值

时间:2016-09-14 06:13:17

标签: opengl

我一直在使用gluPerspective并且有点掌握它在做什么以及它是如何工作的。但我仍然不太明白如何使用它来达到超出启动和停止的效果。更改zfarznear似乎永远不会影响任何内容。我错过了很酷的效果吗?你可以做些什么样的价值观和视觉扭曲?

2 个答案:

答案 0 :(得分:2)

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

请注意,这些功能以及我所说的一切都是遗留的。使用OpenGL 4+,您最好学习现代OpenGL管道。在那里,你有责任明确地做出精确的数学运算,我认为这会改善你对它如何运作的理解。今天你实际上可以使用具有禁用深度剪切的浮点z缓冲区,使所有近/远剪裁平面都过时。

答案 1 :(得分:0)

OpenGL函数GLFrustum()中投影矩阵的几何含义,已在OpenGL官方指南(本书的第9版,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()透视投影矩阵的真正含义进行比较射影几何,并使用任何您自己的几何。