2016-12-09 14 views
-1

私は接続4ゲームを作成していますが、すでにすべてのC++コードを実装しましたが、今はグラフィックを作成しています。GLUTを使ってウィンドウのサイズを変更しながらゲームボードのサイズを変更する

ウィンドウのサイズが変更されたときに、ゲームボードを再センタリングする方法がわかりません。これは私が現在持っているコードです:

void reshape(int w, int h){ 
glViewport(0, 0, (GLsizei)w, (GLsizei)h); 
width = w; 
height = h; 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, width, 0, height, -1.0, 1.0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
} 

は、これは、現在何が起こっているかの写真です:

enter image description here

答えて

0

あなたのゲームは、あなたがそれのためのマージンを見つけたい大きなgameWidth X gameHeightであれば、窓を埋める。まず、ゲームの縦横比とウィンドウの縦横比を比較して、どちらの側に余白を追加するかを確認します。

double windowAspect = (double)w/h; 
double gameAspect = (double)gameWidth/gameHeight; 

if(gameAspect > windowAspect) 
{ 
    //game is wider than the window, apply margins on top and bottom 
    //... 
} 
else 
{ 
    //window is wider than the game, apply margins left and right 
    //... 
} 

最初のケースについてのみ説明します。 2番目のケースも同様です。

最初のケースでは、左右に余白がありません。最終的な投射幅はゲームの幅と同じでなければなりません。上下のマージンは、ゲームによって満たされない画面の部分によって定義されます。

double windowHeightInGameSpace = gameWidth/windowAspect; 
double margin = (windowHeightInGameSpace - gameHeight)/2; 
glOrtho(0, gameWidth, -margin, gameHeight + margin, -1.0, 1.0); 
関連する問題