我对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 7
和Qt 4.7.4
。
如果您需要更多信息,请与我们联系。
编辑:原作中的拼写错误,应该是glOrtho(0, _width, -_height, 0, 0, 1)
而不是glOrtho(0, _width, _height, 0, 0, 1)
。
答案 0 :(得分:1)
您的光栅位置位于窗口的一角。我的猜测是,舍入错误导致在某些情况下剪切位置而不是其他情况。
我认为答案是glWindowPos()
,它是在1.4版本中添加的。如名称所示,它直接在窗口坐标中设置栅格位置,不受模型视图和投影矩阵的影响。重要的是,即使位置在窗口边界之外或之外,栅格位置也始终有效。缺点是您必须在调用glWindowPos()
之前自己进行坐标映射。