在我的Opengl程序中(在我应用透视投影矩阵之前)每当我绘制一些对象时,我都会在世界坐标系的原点处绘制它,但是几乎所有Opengl教程都指出相机(我的投影视图)位于原点朝向正 z 轴(这取决于您稍后如何处理投影矩阵中的 z 值),但是如果这是真的,我的相机(位于原点)如何能够查看位于原点的对象。
注意:我需要这些信息,以便我移动世界并围绕原点旋转它,这样我就得到旋转相机的错觉。
屏幕上显示的内容取决于您对其应用的整个转换。我以使用单位矩阵进行投影和(模型)视图转换的方式解释您的问题。在这种情况下,您将直接在剪辑空间中绘制。从技术上讲,这将定义原点处的相机位置,但视锥体将相当于Ortho(-1.0, 1.0, -1.0, 1.0, 1.0, -1.0)
设置 - 所以你的视锥体将躺一半behind相机(这对于正交投影来说非常好,但可能看起来违反直觉)。对于相机方向,这部分有点模糊。通常,GL 的约定是相机朝 -z 方向看,但在剪辑空间中,+z 将指向屏幕,而经典的Ortho
and Perspective
函数通过实际使用来处理这个问题z_near=-near
and z_far=-far
为了near
and far
参数。 (这也是身份转换是通过以下方式实现的原因Ortho
调用时最后两个符号相对于 x 和 y 范围翻转)。所以在这种情况下,一个could认为相机实际上沿着 +z 方向看,或者可以认为相机沿着 -z 方向看,但近平面和远平面被投影交换。这取决于你喜欢如何解释这些事情。这些约定对于经典的“固定功能”GL 来说最重要,它使用眼睛位置进行照明和雾计算(也许还可以查看其他内容)。并且它还可能假设“相机沿着 -z 方向看”约定来计算镜面照明项,如果GL_LIGHT_MODEL_LOCAL_VIEWER
未启用(默认情况下禁用,请参阅glLightModel() https://www.opengl.org/sdk/docs/man2/xhtml/glLightModel.xml.
在现代 GL 中,除了裁剪空间的左手性之外,不存在这样的约定,并且您可以为眼睛空间制定自己的约定(如果需要的话)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)