2012-08-08 83 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

相關問題