2011-03-14 35 views
0

在OpenGL程序中,我有一個Camera對象,它將投影矩陣設置爲以精靈爲中心。它運行良好,直到我進入全屏模式,我注意到我所關注的對象偏離了中心。在解決了我的解決方案後,我注意到4:3的解決方案沒有這個問題(我原來是在1680x1050),然後我發現了以下內容。視口在全屏中似乎稍微偏離屏幕

1280x1024:object is centered。
1280x960:對象居中。
1280x720:對象不居中,整個視口似乎向左移動。也就是說,當我將鼠標移動到左邊時,它似乎離開屏幕幾英寸,屏幕右側有一個黑色區域,沒有任何東西被繪製,我的鼠標也不會移動。

有沒有人有這樣的問題?如果這很重要,我在Ubuntu上。

回答

1

您是否在設置投影矩陣時考慮了寬高比?

This tutorial如果不是,可能是一個有用的閱讀。

這是我自己的版本(在Python中,但它應該是微不足道的翻譯成java),如果有一個代碼示例有幫助; initPerspectiveMatrix採用縱橫比,即高度/寬度。

def calcFrustumScale(fov): 
    return (1.0/np.tan(np.deg2rad(fov)/2.0)) 

def initPerspectiveMatrix(aspectRatio = 1.0): 
    scale = calcFrustumScale(60) 
    ARscale = scale*aspectRatio 
    near = 0.5 
    far = 1000.0 
    perspMx = np.array([[ARscale, 0.0 ,   0.0   ,   0.0   ], 
         [ 0.0 , scale,   0.0   ,   0.0   ], 
         [ 0.0 , 0.0 , (near+far)/(near-far), (2*near*far)/(near-far)], 
         [ 0.0 , 0.0 ,   -1.0   ,   0.0   ]], dtype='float32') 
+0

我使用glOrtho來設置我的視角。在每次迭代中,攝像機都會調用glOrtho(objectCenter.x-80,objectCenter.x + 80,objectCenter.y-50,objectCenter.y + 50,-1,1)(假設16:10視圖比率),並且每次窗口調用glViewport(0,0,windowWidth,windowHeight)。我錯過了什麼? – HahaHortness 2011-03-14 19:10:02

+0

我不熟悉glOrtho(我仍然在學習OpenGL,並決定使用3.3核心,所以glOrtho,glFrustum等已被棄用),但是從閱讀文檔看來,它似乎可以在16:10長寬比,所以我很茫然。難道在glOrtho之前,在矩陣堆棧上已經有其他東西了嗎?或者你不是在正確的矩陣模式? – 2011-03-15 08:58:50

0

我的猜測是你的顯示器通過VGA連接,並沒有正確校準該分辨率。所以顯示器改變顯示輸出。

可能的解決方案包括:

  • 重新校準顯示器(自動或手動,無論是從顯示器控制或OS控制,如果有的話)
  • 切換到數字1的連接(比如DVI或HDMI)。