2013-11-27 168 views
1

我有一個ortho在2D的時刻設置,當我調整窗口的大小時,它會拉伸窗口中繪製的任何東西,有沒有辦法讓窗口只顯示黑色的時候窗口被調整大小或至少保持內容的縱橫比,所以它們不會伸展。我已經嘗試了一些我在這裏看到的實現,但沒有任何實際的工作。OpenGL防止在窗口調整大小

編輯:對不起球員有位金髮碧眼的時刻,此刻

Protected Overrides Sub OnResize(ByVal e As EventArgs) 
     MyBase.OnResize(e) 

     GL.Viewport(0, 0, Width, Height) 

     GL.MatrixMode(MatrixMode.Projection) 
     GL.LoadIdentity() 
     GL.Ortho(-1.0, testvalue, testvalue , 1.0, 0.0, 4.0) 
    End Sub 

測試值是5000,窗口大小爲800x800

+0

當窗口改變尺寸時,請包括使用「正射影」圖形投影矩陣設置的實際代碼。爲了按照你想要的方式工作,我希望在調整窗口大小之前和之後看到一些數學來補償寬高比。 –

+0

已編輯!我確實嘗試並結合縱橫比,將測試值乘以寬度/高度,但它非常不禮貌,並未真正保持比例。 –

回答

0

我想出了我必須做的事情。不是利用在正交部分的縱橫比,我用它觀察口這樣的:

Dim ar As Single = Width/Height 
GL.Viewport(0, 0, 800 * ar, 800 * ar) 

這防止所有拉伸和簡單地放置在右手側上的黑條時的寬度大於高度。

0

的鄰命令包括:​​以下參數:左,右,底部,頂部,zNear,zFar更多信息:http://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml

您需要將'寬度'插入右側,將'高度'插入底部並確保寬度和高度值反映新窗口大小。

如:

GL.Viewport(0, 0, Width, Height) 
GL.MatrixMode(MatrixMode.Projection) 
GL.LoadIdentity() 
GL.Ortho(0.0, Width, Height, 0.0, 1.0, 2.0) 

,因爲你只後您的2D和zNear可以zFar是相當小的,只要確保zNear和zFar之間渲染和不使用0.0作爲你的zNear,我會建議使用0.1或更大的zNear。

+0

抱歉有一點,更新OP。 –

0

調整大小時,Windows會創建自己的消息泵來處理事件,繞過消息泵。有一些解決方法(黑客)可以在調整大小時進行渲染,包括在線程上運行更新/渲染。請注意,這是D3D和OpenGL的問題。

有一個討論here on an old Gamedev thread