我一直在使用gluPerspective
并且有点掌握它在做什么以及它是如何工作的。但我仍然不太明白如何使用它来达到超出启动和停止的效果。更改zfar
和znear
似乎永远不会影响任何内容。我错过了很酷的效果吗?你可以做些什么样的价值观和视觉扭曲?
答案 0 :(得分:2)
你不会错过任何很酷的效果。 zNear
和zFar
(或nearVal
和farVal
)是距近和远剪裁平面的距离。它们定义了摄像机空间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()
矩阵的一种几何含义:
除了(2)以外,上述所有矩阵因子的几何地义在Unified Framework of Elementary Geometric Transformations中都有清晰的定义。如果选择这种分解作为GLFrustum()
透视投影矩阵的几何含义的解释,则必须确保在代码中进行的任何计算或变换都与其几何含义一致。
因此,当您使用OpenGL GLFrustum()
进行编程时,可能必须与官方指南中说明的内容以及从纯代数的角度来看GLFrustum()
透视投影矩阵的真正含义进行比较射影几何,并使用任何您自己的几何。