2012-08-08 151 views
0

我对glOrtho()遇到的麻烦感到有些困惑。我的代码在以下情况下工作: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

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

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

+0

感谢您的回复。我认为你一定是对的。我会研究glWindowPos并做出决定。我们希望从场景1改变到场景2,以避免映射到另一个坐标系,但是根据您的描述,我们可能不得不这样做。谢谢! – user1585453 2012-08-08 19:37:30

相关问题