2011-03-14 8 views
0

OpenGLプログラムでは、スプライトの中心に投影行列を設定するCameraオブジェクトがあります。フルスクリーンモードに入るまではうまくいきました。焦点を合わせたオブジェクトが中心から外れていることに気付きました。私の解決策をめちゃくちゃにした後、私は4:3解像度にこの問題がないことに気付きました(私はもともと1680x1050でした)。ビューポートはフルスクリーンで少しオフスクリーンに見えます

1280x1024:オブジェクトは中央に配置されます。
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

+0

私はglOrthoに精通していません(私はまだOpenGLを学んでいますが、3.3コアでglOrtho、glFrustumなどが廃止されることにしました)が、ドキュメントを読むと16:10アスペクト比のように私は迷っています。 glOrthoの前に既にマトリックススタックに何か他のものがあるかもしれませんか?それとも、あなたは正しいマトリックスモードではないのですか? –

0

あなたのモニターはVGA経由で接続されており、その解像度では正しく調整されていないと思われます。モニターはディスプレイ出力をシフトします。

可能な解決策は、(利用可能な場合、どちらかのモニター・コントロールやOSの制御から、自動または手動)

  • モニターを再調整
  • は(デジタル1への接続を切り替えるDVIを言いますかHDMI)。