我最近开始使用 LWJGL 并注意到该glOrtho
方法采用参数 left、right、bottom、top 并且无法弄清楚这些对应于什么。
当我注意到这一点时,我很困惑
glOrtho(1, 1, 1, 1, 1, -1);
是一样的
glOrtho(-1, 1, -1, 1, 1, -1);
我是否正确地说这些代码片段是相同的,如果是,为什么?
我最近开始使用 LWJGL 并注意到该glOrtho
方法采用参数 left、right、bottom、top 并且无法弄清楚这些对应于什么。
当我注意到这一点时,我很困惑
glOrtho(1, 1, 1, 1, 1, -1);
是一样的
glOrtho(-1, 1, -1, 1, 1, -1);
我是否正确地说这些代码片段是相同的,如果是,为什么?
不,它们不一样:
glOrtho(1, 1, 1, 1, 1, -1);
只会产生一个GL_INVALID_OPERATION
错误,并且该推荐没有进一步的效果。当 left==right 或 top==bottom 或 near==far 时发生错误。(如果它不检查该条件,则会发生除以零)。
glOrtho(-1, 1, -1, 1, 1, -1);
实际上什么都不做,因为它将当前矩阵乘以单位矩阵。
看起来这些命令似乎具有相同的结果,但实际发生的情况却大不相同。
正交投影是一个长方体(又名盒子)。调用的参数glOrtho
定义了这个盒子的剪裁平面或边。投影框之外的任何东西都不会被渲染。
关于您的示例调用,第一个 ( glOrtho(1,1,1,1,1,-1)
) 无效并生成GL_INVALID_OPERATION
)。为什么?正交投影定义为
right == left
请注意由于和而除以 0 错误top == bottom
。
第二个示例 ( glOrtho(-1,1,-1,1,1,-1)
) 只是创建了一个单位矩阵。