2016-12-09 1 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 х 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 
    //... 
} 

Я только объяснить первый случай. Второй случай аналогичен.

В первом случае не будет полей слева и справа. Таким образом, конечная ширина прогона должна быть равна ширине игры. Верхнее и нижнее поля затем определяются частью экрана, которая не заполнена игрой:

double windowHeightInGameSpace = gameWidth/windowAspect; 
double margin = (windowHeightInGameSpace - gameHeight)/2; 
glOrtho(0, gameWidth, -margin, gameHeight + margin, -1.0, 1.0);