2

我最近开始使用 LWJGL 并注意到该glOrtho方法采用参数 left、right、bottom、top 并且无法弄清楚这些对应于什么。

当我注意到这一点时,我很困惑

glOrtho(1, 1, 1, 1, 1, -1); 

是一样的

glOrtho(-1, 1, -1, 1, 1, -1);

我是否正确地说这些代码片段是相同的,如果是,为什么?

4

2 回答 2

4

不,它们不一样:

glOrtho(1, 1, 1, 1, 1, -1);

只会产生一个GL_INVALID_OPERATION错误,并且该推荐没有进一步的效果。当 left==right 或 top==bottom 或 near==far 时发生错误。(如果它不检查该条件,则会发生除以零)。

glOrtho(-1, 1, -1, 1, 1, -1);

实际上什么都不做,因为它将当前矩阵乘以单位矩阵。

看起来这些命令似乎具有相同的结果,但实际发生的情况却大不相同。

于 2014-04-15T19:31:02.007 回答
4

正交投影是一个长方体(又名盒子)。调用的参数glOrtho定义了这个盒子的剪裁平面或边。投影框之外的任何东西都不会被渲染。

关于您的示例调用,第一个 ( glOrtho(1,1,1,1,1,-1)) 无效并生成GL_INVALID_OPERATION)。为什么?正交投影定义为

在此处输入图像描述

right == left请注意由于和而除以 0 错误top == bottom

第二个示例 ( glOrtho(-1,1,-1,1,1,-1)) 只是创建了一个单位矩阵

第 3 章 - OpenGL 编程指南 - 投影变换

ScratchPixel - 正交投影教程

于 2014-04-15T19:38:39.083 回答