2012-03-21 12 views
-1

私はしばらくの間、私のゲームでうまく動作するように解像度の設定を取得しようとしてきました。私は一定に保つために努力している16:9の比率を持っています。 OpenGLでSDLを使用しています。そして、ここに私の解像度変更クラスです:OpenGLの解像度設定、説明できないように画面が表示される

#ifndef _RESOLUTION_CPP_ 
#define _RESOLUTION_CPP_ 

#include "Main.h" 

class Resolution{ 

public: 

static void ChangeResolution(SDL_Surface* Screen,int Width,int Height, bool FullScreen){ 
    int Full = 0; 
    if(FullScreen){ 
     Full = SDL_FULLSCREEN; 
    } 
Screen = SDL_SetVideoMode(Width , Height, 32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL| Full); 

glClearColor(0, 0, 0, 0); 
glClearDepth(1.0f); 

glViewport(0, 0, Width, Height); 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

//glOrtho(0, Width, Height, 0, 1, -1); 
glOrtho(0, 960,540, 0, 1, -1); 

glMatrixMode(GL_MODELVIEW); 

glEnable(GL_TEXTURE_2D); 

glLoadIdentity(); 
} 

}; 

#endif 

は今、最初に私は、ウィンドウのサイズとビューポートと一緒にスケールするglOrthoセットを持っていたが、それは、ウィンドウのサイズが大きくなったとして、私はどのwasn、画面の詳細を参照作ら私が望んでいたものではない。だからカメラを設定することで(glOthoはカメラのようなものですか?)一定の幅と高さに私は常に画面の同じ部分を見ることができました。ここまでは順調ですね。

今、ウィンドウモードでゲームを試してみると、すべてが正確に動作するはずです。アスペクト比を維持しながらゲームのグラフィックの縮尺を変え、私はいつも画面の同じ部分を見る。

今5に全画面表示をしようと:4モニター、これは私が得るものです:

enter image description here

左:960×540 --- 中:1024×576 --- 右:1200x675

ご覧のとおり、画面の中央にあるものだけが動作しています。画面いっぱいに伸びていますが、縦に伸びていないため、アスペクト比が破壊されていません。左のものはアスペクト比を維持していますが、十分なスケーリングはしていません。

右のものが縦に引き伸ばされ、縦横比が壊れています。何故ですか?それはなぜそんなに伸ばされるのだろうか?

また、私は中央のモニターで上下が黒いスペースになるように画面をセンタリングする方法はありますか?

追加情報:私は16:10ラップトップでこれをしようとすると

、私は画面と同様の結果が十分に拡大縮小されていないか、センタリングされていないが、それは伸びません取得します。 1920,1080という巨大な解像度でそれを設定することさえできます。私は小さな部分しか見ることができないように正確に画面を拡大していますが、1920x1080をはるかに小さい解像度で握ることはできません。

私の質問は本当にです:なぜ解像度の問題は完全に予測できないのですか?時にはそれが伸びる、時にはそれは十分に拡大しない、など..そして、どうすればそれを修正できますか?

+0

とmathchするよう【このSO質問](http://stackoverflow.com/questions/ 2571402/c-opengl-glortho-please-explain-of-this-command)が役に立ちます。 –

+0

他のサイトではなく、実際の投稿にコードを入れることを検討しましたか? –

答えて

0
glOrtho(0, 960,540, 0, 1, -1); 

偶然にできる複数(GLfloat)幅/(GLfloat)高さ比はたぶんビューポート

関連する問題