glOrtho结果不是我的预期

时间:2012-08-08 17:33:56

标签: qt opengl

我对glOrtho()遇到的麻烦感到有些困惑。我的代码适用于以下情况:

// Scenario 1
...
glOrtho(0, _width, 0, _height, 0, 1);
...
glRasterPos2i(0, 0);
...

但是,我对这个坐标系不满意,我希望它能够使用:

// Scenario 2
...
glOrtho(0, _width, -_height, 0, 0, 1);
...
glRasterPos2i(0, -_height);
...

不幸的是,只在我的代码中更改上面的两行就会留下空白屏幕。我以为我不明白glOrtho()glRasterPos2i()是如何工作的,因为我对OpenGl还不熟悉,所以我尝试了以下内容:

// Scenario 3
...
glOrtho(0, _width, -_height, 1, 0, 1);
...
glRasterPos2i(0, -_height);
...

令我惊讶的是,它奏效了!为什么是这样?上面的代码不足以满足我的目的,所以我会坚持使用方案1,除非我能解决我的问题。有没有人对场景1和3的工作原理有任何见解,但场景2没有?根据我的网络搜索,情景2应该有效,所以我必须误解一些东西。

如果有帮助,我使用glDrawPixels()绘制图像,其中_height和_width是图像的高度和宽度。

我正在使用Windows 7Qt 4.7.4

如果您需要更多信息,请与我们联系。

编辑:原作中的拼写错误,应该是glOrtho(0, _width, -_height, 0, 0, 1)而不是glOrtho(0, _width, _height, 0, 0, 1)

1 个答案:

答案 0 :(得分:1)

您的光栅位置位于窗口的一角。我的猜测是,舍入错误导致在某些情况下剪切位置而不是其他情况。

我认为答案是glWindowPos(),它是在1.4版本中添加的。如名称所示,它直接在窗口坐标中设置栅格位置,不受模型视图和投影矩阵的影响。重要的是,即使位置在窗口边界之外或之外,栅格位置也始终有效。缺点是您必须在调用glWindowPos()之前自己进行坐标映射。