0

我对自己遇到的麻烦感到有些困惑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).

4

1 回答 1

1

您的光栅位置位于窗口的角落。我的猜测是,舍入误差会导致在某些情况下位置被剪裁,但在其他情况下不会。

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

于 2012-08-08T19:22:30.217 回答